Sql 组合两个查询,查找重复项,并且为NULL或空

Sql 组合两个查询,查找重复项,并且为NULL或空,sql,sql-server,Sql,Sql Server,我试图编写一个查询,其中它将报告SSN不为null或空(“”)且SSN只存在一次的所有帐户。(没有重复的SSN)。我正确地编写了这两个查询,但它们是分开的。你知道我将如何把两者结合起来吗?以下是查询: 查找重复项: SELECT [ContactID] , [SSN] FROM [dbo].[ContactMaster] GROUP BY [ContactID], [SSN] HAVING COUNT([SSN]) > 1 下面是第二个查找任何空SSN的查询: SELECT [

我试图编写一个查询,其中它将报告SSN不为null或空(“”)且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] = ''

关于如何将这两个问题合并到一个查询中,有什么想法吗?谢谢

您可以像这样使用联合体:

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] = ''

您应该能够在单个查询中同时拥有
WHERE
HAVING
子句。其中在聚合处理之前处理,而具有的在聚合处理之后处理:

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

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

您希望结果如何?添加示例数据和预期结果。抱歉,我希望预期结果只列出两列,contactID(int)和SSN(char(9))。将[contactID]添加到第二个查询(甚至可能将问题描述为两个查询的硬编码文本段),然后使用UNION将它们组合在一起?第一个查询实际上会返回重复项,不是唯一的