我需要生成一个报告,使用与另一个客户相同的身份证明来标识所有客户。
在一系列其他操作之后,我有一个表,其中包含客户的姓名,客户编号和他们注册时使用的身份证明编号,按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列名)