Sql server 使用唯一记录计算所需的查询帮助

Sql server 使用唯一记录计算所需的查询帮助,sql-server,count,distinct,Sql Server,Count,Distinct,我有以下数据结构,我试图找到唯一的ID,其中值字母value等于A和B(即选择ID=1,但不是ID=3或5)。 还可以找到唯一的ID,其中值字母表值同时包含A和B(即选择ID=1、3和5) 这应该做到: SELECT ID FROM Alphabets WHERE Alphabets IN ('A','B') EXCEPT SELECT ID FROM Alphabets WHERE Alphabets NOT IN ('A','B') 完成这项任务还有许多其他方法,但这是最简单的方法之一

我有以下数据结构,我试图找到唯一的ID,其中值字母value等于A和B(即选择ID=1,但不是ID=3或5)。 还可以找到唯一的ID,其中值字母表值同时包含A和B(即选择ID=1、3和5)

这应该做到:

SELECT ID
FROM Alphabets
WHERE Alphabets IN ('A','B')

EXCEPT

SELECT ID
FROM Alphabets
WHERE Alphabets NOT IN ('A','B')
完成这项任务还有许多其他方法,但这是最简单的方法之一

单个过程中更模糊(但更有效)的解决方案使用聚合和CASE表达式:

SELECT ID
FROM Alphabets
GROUP BY ID
HAVING MAX(CASE WHEN Alphabets IN ('A','B') THEN 0 ELSE 1 END) = 0

谢谢,效果很好。我计划使用更高效的HAVING解决方案,而不是join。嘿@spaghettidba,另一个查询…..如果我想选择ID=1、3和5怎么样??这是所有同时具有和的记录B@Deb
从字母表中选择ID,其中('A','B')组中的字母表的ID的计数(*)为2
谢谢,这也很好。我现在也更新了问题……)这两个查询都不是OP想要的。它将包括只有A或B的ID:
SELECT ID
FROM Alphabets
GROUP BY ID
HAVING MAX(CASE WHEN Alphabets IN ('A','B') THEN 0 ELSE 1 END) = 0