Наличие в SQL-заявлении не возвращает точных результатов

У меня есть запрос, который возвращает данные клиента из таблицы temp. В таблице temp хранится только номер клиента и фамилии. Он имеет около 320 записей для людей, которые имеют право на участие в программе.

create table #customers ( customer_no int, fname varchar(20), lname varchar(55) ) 

Что мне нужно сделать из базы данных, скажем, дайте мне всех из всей нашей базы данных, у которой есть комбинация имени и фамилии (чтобы найти дубликаты). Нам также нужно вытаскивать адреса, но мы не хотим использовать номер клиента в нашем поиске, потому что мы нуждаемся в нем позже, но на данный момент мы хотим, чтобы сравнение было строго на имя и фамилию.

 select distinct a.customer_no, a.fname, a.mname, a.lname, b.street1, b.street2, b.city, b.state, b.postal_code from T_CUSTOMER a join T_ADDRESS b on a.customer_no = b.customer_no where ( lname in (select lname from #customers) and fname in (select fname from #customers) ) order by a.lname, a.fname 

поэтому запрос возвращается с хорошим длинным списком записей – однако, поскольку существует много комбинаций дубликатов (он возвращает номер клиента несколько раз).

например:

 customer_no fname mname lname street1 city 86224371 John NULL Cornid 11 Maplewood Dr. New Haven 86224371 John NULL Cornid 11 Maplewood Drive Hartford 86313525 John NULL Cornid 11 Maplewood Dr Hartford 86390546 John Seth Cornid 11 Maplewood dr. New Haven 

Поэтому данные верны. Единственная проблема в том, что я хочу подавить первую строчку – я хочу сказать, чтобы я дал уникальные номера клиентов. Я хочу, чтобы мой результат был следующим:

  customer_no fname mname lname street1 city 86224371 John NULL Cornid 11 Maplewood Dr. New Haven 86313525 John NULL Cornid 11 Maplewood Dr Hartford 86390546 John Seth Cornid 11 Maplewood dr. New Haven 

Мы должны предоставить основную информацию для очистки данных. Мы хотим, чтобы каждый номер клиента был вытащен один раз.

 select distinct a.customer_no, a.fname, a.mname, a.lname, b.street1, b.street2, b.city, b.state, b.postal_code from T_CUSTOMER a join T_ADDRESS b on a.customer_no = b.customer_no where ( lname in (select lname from #customers) and fname in (select fname from #customers) ) group by a.customer_no, a.fname, a.mname, a.lname, b.street1, b.street2, b.city, b.state, b.postal_code having count(a.customer_no) > 1 order by a.lname, a.fname 

Я написал выше, чтобы включить счет customer_no> 1, но он не работает, потому что он возвращает пустой набор данных.

пожалуйста, порекомендуйте. Спасибо.

    Вам нужно использовать соединение

     select a.customer_no, a.fname, a.mname, a.lname, b.street1, b.street2, b.city, b.state, b.postal_code from T_CUSTOMER a join T_ADDRESS b on a.customer_no = b.customer_no join #customers c on a.lname = c.lname and a.fname = c.fname order by a.lname, a.fname 

    как побочное примечание, если вам нужно использовать разные, вы, вероятно, ошибаетесь.


    иногда вам нужно это сделать:

     join #customers c on upper(a.lname) = upper(c.lname) and upper(a.fname) = upper(c.fname) 

    иногда вам нужно это сделать:

     join #customers c on trim(a.lname) = trim(c.lname) and trim(a.fname) = trim(c.fname) 

    Это может быть другой вопрос, но в комментарии ниже

    У нас есть запись с несколькими адресами, и она возвращается и подсчитывается несколько раз. Но я хочу, чтобы это произошло, если имена разные, а номера клиентов разные

    Чтобы только «подсчитать», как только я это сделаю:

     select * from ( select a.customer_no, a.fname, a.mname, a.lname, b.street1, b.street2, b.city, b.state, b.postal_code row_number(partition by a.fname, a.lname, a.customer_no order by street1, stree2) as rn from T_CUSTOMER a join T_ADDRESS b on a.customer_no = b.customer_no ) x where rn = 1 

    Не я бы предложил лучшее поле, чем street1, в качестве порядка, например, дату обновления или дату создания.

    Interesting Posts

    Относительная производительность в SQLServer подстроки по сравнению с комбинацией Right-Left

    Недопустимый XML в столбце varbinary (max) в SQL Server 2005

    Не все пути кода возвращают значение sql

    ASP.NET | C # | Выпадающий список SelectedItem для базы данных?

    Как передать значение типа Nullable Bit в хранимую процедуру SQL Server?

    Как проверить, существует ли таблица, лежащая в основе синонима

    Каковы преимущества и недостатки отключения NOCOUNT в запросах SQL-сервера?

    Невозможно вставить значение NULL в столбец '', столбец таблицы не допускает нулей. INSERT не работает

    Как выбрать каждое значение для сервера sql-узла xml

    .NET хостинг для демонстрационных проектов

    Как изменить существующие таблицы для добавления часового пояса

    Группа по всем дочерним записям

    Украинский символ меняет знак вопроса при вставке в таблицу

    Установить локальную переменную в выражении rdlc

    Переменные в OPENQUERY Ошибка «Отсроченная подготовка не может быть завершена»

    Давайте будем гением компьютера.