Tsql T-SQL group by和all过滤器
请编辑我的问题以获得更好的标题(并删除此行) 嗨,我有一张桌子Tsql T-SQL group by和all过滤器,tsql,group-by,Tsql,Group By,请编辑我的问题以获得更好的标题(并删除此行) 嗨,我有一张桌子 id|Col_A|Col_B| --|-----|-----| 1| A | NULL| 2| A | a | 3| B | a | 4| C | NULL| 5| C | NULL| 我只想选择所有列B都为空的行,按列A分组(即在本例中只返回C) 尝试 这给了我A和C。我也试过了 SELECT Col_A, Col_B FROM MYTABLE GROUP BY Col_A, Col_B H
id|Col_A|Col_B|
--|-----|-----|
1| A | NULL|
2| A | a |
3| B | a |
4| C | NULL|
5| C | NULL|
我只想选择所有列B都为空的行,按列A分组(即在本例中只返回C)
尝试
这给了我A和C。我也试过了
SELECT Col_A, Col_B FROM MYTABLE GROUP BY Col_A, Col_B HAVING Col_B IS NULL
这也给了我A和C
如何编写一个T-SQL查询,仅当所有组都符合条件时才选择一个组?
谢谢这似乎有效:
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
因为如果所有输入都是NULL
,则MAX
(或MIN
)只能返回NULL
结果:
Col_A
-----
C
类似地,如果您想检查所有特定的非空值的所有值,您可以通过首先确认该列的
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
的组,使用MAX和MIN真是个好主意!非常感谢!
select Col_A from @t group by Col_A
having MAX(Col_B) = MIN(Col_B) and
MIN(Col_B) = 'a'