获取并非所有特定字段== true的记录列表

时间:2014-07-16 23:00:04

标签: sql

我有一张这样的桌子;

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以来,已经有好几年了,而且我很难做到这一点。

2 个答案:

答案 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')