1

新手警报

我有一个 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

在尝试对这张表进行重复数据删除时,我们不希望包括来自同一家庭的任何客户。我可以找到骗子,所以我想我可以围绕它包装另一个查询,以排除任何具有相同CustomerCode标题的行,其中标题不匹配(我意识到这不是一种无懈可击的方法)。但是对于我的一生,我什么都做不了。

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

提前致谢。

4

2 回答 2

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,了解这些函数非常有用。

于 2013-05-11T17:20:36.917 回答
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
于 2013-05-11T17:15:08.737 回答