NEWBIE ALERT
我有一个SQL Server 2005表,其中包含基于家庭的客户帐户,因此每个家庭都有一个CustomerCode
,如下所示:
CUSTOMERCODE UNIQUEID TITLE FORENAME SURNAME ADDRESS1
A3210 034123 Mr Bill Whithers 1 Roach Street
A3210 300443 Mrs Jane Whithers 1 Roach Street
A5342 450034 Mr Jeff Babbage 23 Ruben Road
A6786 258032 Mr Aubrey Truss 54 Bilge Terrace
在尝试重置此表时,我们不希望包含来自同一家庭的任何客户。我可以找到dupes&所以我想我可以再绕一个查询来排除任何具有相同CustomerCode
的行,其中Title不匹配(我意识到这不是一个防水方法)。但是对于我的生活,我无法得到任何工作。
有什么想法吗?请。毫无疑问,这很简单&我在浪费你的时间,但如前所述,我有点像新手......
提前致谢。
答案 0 :(得分:1)
如果您每个家庭只需要一行,请使用row_number()
:
select c.*
from (select c.*,
row_number() over (partition by CustomerCode order by UniqueId) as seqnum
from Customers c
) c
where seqnum = 1;
如果您希望家庭只有一名成员,请使用count() over
:
select c.*
from (select c.*,
count(*) over (partition by CustomerCode) as HouseholdCnt
from Customers c
) c
where HouseholdCnt = 1;
这些都是“窗口”函数的示例,这对于了解您是否正在学习SQL非常有用。
答案 1 :(得分:0)
您可以使用row_number()
为居住在同一地址的人分配不断增加的数字。
select *
from (
select row_number() over (
partition by Address1
order by UniqueID) as rn
, *
from YourTable
) SubQueryAlias
where rn = 1 -- Select only first person at an address