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