我有一张这样的桌子;
Fld1 Text
Fld2 Text
Fld3 Bool
数据可能看起来像这样;
Fld1 Fld2 Fld3
1 1 T
1 2 T
1 3 T
2 4 T
3 5 T
3 6 F
4 7 F
所以我想要一个查询,它给我所有Fld1条目,其中所有Fld3都是T.
所以在上面的结果集应该是;
1和2.省略了3和4,因为并非所有记录都有T,其中1和2的所有记录都带有True。
自从我需要做SQL以来,已经有好几年了,而且我很难做到这一点。
答案 0 :(得分:2)
以下是Sql Server的测试示例:
DECLARE @SomeTable TABLE (Fld1 VARCHAR(20), Fld2 VARCHAR(20), Fld3 BIT)
INSERT INTO @SomeTable( Fld1, Fld2, Fld3 )
VALUES ( '1', '1', 1),
( '1', '2', 1),
( '1', '3', 1),
( '2', '4', 1),
( '3', '5', 1),
( '3', '6', 0),
( '4', '7', 0)
SELECT Fld1
FROM @SomeTable
GROUP BY Fld1
having min(CAST(Fld3 AS INT)) = 1
这假设您的Fld3列实际上是布尔值(位)。
它返回:
1
2
答案 1 :(得分:2)
Fld2没用了吗?我认为你可以通过一个非陈述
select distinct fld1
from atable
where fld1 not in (select fld1
from atable
where fld3 = 'f')