标识包含null或不包含null或非null值的组

时间:2014-09-26 01:32:24

标签: sql group-by

如何按列A进行分组,只获取B永远不为空的组?使用SQL Server 2012。

有关

A        B
Car      Radio
Car      Battery
Sedan    NULL
Sedan    Battery
Boat     NULL
Boat     NULL

我想要一个返回

的查询
A        
CAR

我还想要一个返回所有为NULL的组的查询(我的样本中有1行,Boat)。我可以看到用一堆子查询来做它,但似乎应该有一些简单的语法,如[这只是组成]“HAVING(不存在B是空的)”?

2 个答案:

答案 0 :(得分:1)

您使用having子句。这是一种方式:

select A
from table t
group by A
having count(*) = count(B);

您也可以使用:

having sum(case when b is null then 1 else 0 end) = 0;

答案 1 :(得分:0)

这些是一些额外的方式(加入,不存在,不存在),但你可能最好坚持聚合。

join方法:

select distinct x.a
  from tbl x
  left join (select a from tbl where b is null) y
    on x.a = y.a
 where y.a is null

not exists方法:

select distinct a
  from tbl t
 where not exists (select 1
          from tbl x
         where x.b is null
           and x.a = t.a)

not in方法:

select disinct a
  from tbl
 where a not in (select a from tbl where b is null)