【发布时间】:2015-10-14 17:59:34
【问题描述】:
我有一个从临时表返回客户数据的查询。临时表仅存储客户编号的名字和姓氏。它有大约 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
我在上面写了包含 count customer_no > 1 但它不起作用,因为它返回一个空数据集。
请指教。 谢谢你。
【问题讨论】:
标签: sql-server join group-by having