T-SQL group by和filter for all

时间:2014-04-03 07:52:07

标签: tsql group-by

请编辑我的问题以获得更好的标题(并删除此行)

嗨,我有一张桌子

id|Col_A|Col_B|
--|-----|-----|
 1|  A  | NULL|
 2|  A  |  a  |
 3|  B  |  a  |
 4|  C  | NULL|
 5|  C  | NULL|

我想只选择Col_A所有Col_B为NULL组的行(即在此示例中只返回C)

尝试

SELECT Col_A FROM MYTABLE WHERE Col_B IS NULL GROUP BY Col_A

给了我A和C.还试过

SELECT Col_A, Col_B FROM MYTABLE GROUP BY Col_A, Col_B HAVING Col_B IS NULL

也给了我A和C.

如果所有符合条件的情况下,如何编写T-SQL查询来选择组? 谢谢

1 个答案:

答案 0 :(得分:1)

这似乎有效:

declare @t table (id int,Col_A char(1),col_b char(1))
insert into @t(id,Col_A,Col_B) values
(1,'A',NULL),
(2,'A', 'a'  ),
(3,'B', 'a'  ),
(4,'C',NULL),
(5,'C',NULL)

select Col_A from @t group by Col_A having MAX(Col_B) is null

如果{em>所有输入都是MAXMIN(或NULL)只能返回NULL

结果:

Col_A
-----
C

同样,如果您想要检查所有值特定,非NULL值的所有值,您可以先确认MIN()来检查并且该列的MAX() 相等然后根据所寻找的值检查其中任何一个:

select Col_A from @t group by Col_A
having MAX(Col_B) = MIN(Col_B) and
       MIN(Col_B) = 'a'

只返回B,因为这是所有输入值等于a的唯一群组。