SQL Server删除具有重复信息的条目

时间:2013-03-13 22:42:57

标签: sql sql-server

我需要生成一份报告,使用与另一位客户相同的身份证明来识别任何客户。

经过一系列其他操作后,我有一张表,其中包含客户名称,客户编号,以及他们在注册时使用的身份证明号码,按ID号分组,仅包含任何组遗漏了一个条目。

出现的问题是,似乎大量客户在其名下有多个帐户,这些需要被忽略,除非额外的客户也使用相同的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 个答案:

答案 0 :(得分: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列名)