2013-03-13 46 views
1

我需要生成一份报告,标识与另一个客户使用相同身份证明的任何客户。SQL Server删除具有重复信息的条目

经过一系列其他操作后,我有一个表格,其中包含客户名称,客户编号和登记时使用的身份证明号码,按身份证号码分组,并与任何组只有一个条目被遗漏。

问题在于,似乎大量客户的名下有多个帐户,需要忽略这些帐户,除非额外的客户也使用相同的ID号,在这种情况下,具有该号码的所有条目都需要被保存。

例如下面,我想删除条目1-3,因为它显然是同一个人,但保留4和5,因为6不匹配。

 ID # | Name | customer number 
    1 | 1111 | April | 321 
    2 | 1111 | April | 432 
    3 | 1111 | April | 431 
    4 | 2222 | Bob  | 987 
    5 | 2222 | Bob  | 454 
    6 | 2222 | Charles | 159 

有没有这样做的好方法?

回答

1

也许使用EXISTS

SELECT ID,Name,[customer number] 
FROM dbo.Customer c1 
WHERE EXISTS 
(
    SELECT 1 FROM dbo.Customer c2 
    WHERE c2.ID = c1.ID 
    AND c2.Name <> c1.Name 
) 

注意,这也将省略记录有唯一的ID /名称。如果要包括这些,你必须使用另一个NOT EXISTS

SELECT ID,Name,[customer number] 
FROM dbo.Customer c1 
WHERE EXISTS 
(
    SELECT 1 FROM dbo.Customer c2 
    WHERE c2.ID = c1.ID 
    AND c2.Name <> c1.Name 
) 
OR NOT EXISTS 
(
    SELECT 1 FROM dbo.Customer c2 
    WHERE c2.ID = c1.ID 
    AND c2.[customer number] <> c1.[customer number] 
) 

(假设[customer number]是因为你还没有表现出的PK列名的标识符)

+0

这似乎很好地工作,谢谢 – user2167389 2013-03-13 23:04:19