如何按列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是空的)”?
答案 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)