我有一张这样的表:
ID | Boolean
================
1 | TRUE
1 | FALSE
1 | TRUE
2 | TRUE
2 | TRUE
2 | FALSE
3 | FALSE
3 | FALSE
3 | FALSE
我想要获得的是ID仅出现为“错误”的ID。在布尔列中,所以我的结果应该看起来像
3
我粗略的SQL如下:
SELECT DISTINCT ID, Boolean
FROM FakeTable
WHERE Boolean = 'False'
关于尽可能基本的。但是,当然,当我这样做时,我得到以下结果:
1
2
3
显然,因为每个ID都至少有一个“假”错误。在布尔列中。我怎么能缩小它呢?
答案 0 :(得分:1)
一个快速选项
假设Boolean
是BIT
,我们可以使用隐式转化,因此0+Boolean
Select ID
from YourTable
Group By ID
Having max(0+Boolean)=0
答案 1 :(得分:1)
这只给出那些有假而不是真正成分的东西。
我从嵌套查询更改为JOIN
SELECT DISTINCT A.ID, A.Boolean
FROM FakeTable A
LEFT OUTER JOIN FakeTable B on A.ID=B.ID AND B.Boolean='True'
WHERE A.Boolean = 'False' AND B.ID IS NULL
答案 2 :(得分:0)
这将有效:
SELECT DISCTINCT ID
FROM FakeTable ft1
WHERE NOT EXISTS(
SELECT ID
FROM FakeTable ft2
WHERE ft2.ID = ft1.ID
AND ft2.Boolean = 'True'
)
我没有测试过,但也应该工作:
SELECT ID
FROM FakeTable
GROUP By ID
HAVING MAX(CASE Boolean WHEN 'True' THEN 1 ELSE 0 END) = 0
答案 3 :(得分:0)
您可以使用汇总功能SUM
您需要将BIT转换为INT,因为BIT对SUM运算符
无效
SELECT ID
FROM FakeTable
GROUP BY ID
HAVING SUM(CAST(Boolean AS INT)) = 0