У меня есть запрос, который возвращает данные клиента из таблицы temp. В таблице temp хранится только номер клиента и фамилии. Он имеет около 320 записей для людей, которые имеют право на участие в программе.Наличие в SQL-заявлении не возвращает точных результатов
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, но он не работает, потому что она возвращает пустой набор данных.
сообщите пожалуйста. спасибо.
Извинения за изменения здесь ... это не работает. У меня есть первый набор записей, возвращающихся дважды. 86224371, 86224371, 86313525, 86390546. Да, адреса разные, но мне все равно. Мне нужно предоставить пользователю уникальные номера клиентов. поэтому мне нужно, чтобы это было 86224371, 86313525, 86390546. – Elizabeth
нормально, как он не работает ... чего вы ожидали от того, что он не делает? – Hogan
У нас есть запись с несколькими адресами и ее возвращение и подсчет несколько раз. Но я хочу только, чтобы это произошло, если имена разные, а номера клиентов разные. – Elizabeth