请编辑我的问题以获得更好的标题(并删除此行)
嗨,我有一张桌子
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查询来选择组? 谢谢
答案 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>所有输入都是MAX
,MIN
(或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
的唯一群组。