结合两个查询,查找dupes和IS NULL或为空

时间:2015-10-19 12:44:41

标签: sql sql-server

我正在尝试编写单个查询,它将报告SSN不为空或空的所有帐户(<>'')并且SSN仅存在一次。 (没有重复的SSN)。我正确地写了两个查询,但是分开了。关于如何将两者结合起来的任何想法?以下是以下查询:

查找重复项:

SELECT [ContactID]
     , [SSN]
FROM [dbo].[ContactMaster]
GROUP BY [ContactID], [SSN]
HAVING COUNT([SSN]) > 1

以下是查找任何空或空SSN的第二个查询:

SELECT [SSN] FROM [dbo].[AccountContacts] WHERE [SSN] IS NULL OR [SSN] = ''

关于如何将这两者合并为一个查询的任何想法?谢谢!

2 个答案:

答案 0 :(得分:0)

您可以像这样使用UNION:

SELECT [ContactID]
     , [SSN]
FROM [dbo].[ContactMaster]
GROUP BY [ContactID], [SSN]
HAVING COUNT([SSN]) > 1

UNION

SELECT [ContactID], [SSN] FROM [dbo].[AccountContacts] WHERE [SSN] IS NULL OR [SSN] = ''

答案 1 :(得分:0)

您应该能够在一个查询中同时拥有WHEREHAVING子句。在汇总处理之前处理WHERE,之后处理HAVING

SELECT   [ContactID], [SSN]
FROM     [dbo].[ContactMaster]
WHERE    [SSN] IS NULL OR [SSN] = ''
GROUP BY [ContactID], [SSN]
HAVING   COUNT([SSN]) = 1

甚至可能在数据库的SSN表中有空/ NULL ContactManager值吗?如果它被用作外键,则可能没有任何NULL值。