SQL - 试图从重复数据删除中排除同居者

时间:2013-05-11 17:07:19

标签: sql sql-server sql-server-2005

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不匹配(我意识到这不是一个防水方法)。但是对于我的生活,我无法得到任何工作。

有什么想法吗?请。毫无疑问,这很简单&我在浪费你的时间,但如前所述,我有点像新手......

提前致谢。

2 个答案:

答案 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