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  

有什么好办法吗?

可能使用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/name的记录。如果你想包含这些,你必须使用另一个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列名)

相关内容

最新更新