如果组中的单个项目为空,如何保留分组项目

时间:2014-09-09 08:33:13

标签: oracle group-by

当组中的单个项目为空时,如何保留分组项目。

例如:

Col1    Col2
A        1

A        null

B        3
B        3

C        2
C        null 
C        null

D        2
D        4 
D        9
D        2

So the output :

B
D

我尝试将至少有一条记录的组排除为null。

任何帮助?

3 个答案:

答案 0 :(得分:3)

和另一个:

SELECT
      col1
FROM TheTable
MINUS
      SELECT
            col1
      FROM TheTable
      WHERE col2 IS NULL
;

答案 1 :(得分:2)

我喜欢MINUS(没有两个DISTINCT s)的答案,因为它很干净。但是,如果您只想访问一个表并拥有简单的SQL,那么请转到HAVING

SQL> create table mytable (col1,col2)
  2  as
  3  select 'A', 1 from dual union all
  4  select 'A', null from dual union all
  5  select 'B', 3 from dual union all
  6  select 'B', 3 from dual union all
  7  select 'C', 2 from dual union all
  8  select 'C', null from dual union all
  9  select 'C', null from dual union all
 10  select 'D', 2 from dual union all
 11  select 'D', 4 from dual union all
 12  select 'D', 9 from dual union all
 13  select 'D', 2 from dual
 14  /

Table created.

SQL> select col1
  2    from mytable
  3   group by col1
  4  having count(*) = count(col2)
  5  /

C
-
D
B

2 rows selected.

此解决方案依赖于众所周知的事实,即聚合函数COUNT不计算NULL值。

答案 2 :(得分:1)

您可以提前排除[{1}} Col1 null的{​​{1}}值:

col2