按NULL值分组

时间:2016-09-16 08:45:07

标签: sql oracle oracle11g

我试图从多个表中选择所有唯一行,并且在表中它们相同的位置添加总计。

这是正常的,除了在两个表中的列中存在NULL值的情况。在每个单独的表格中,它们被组合在一起,但未在下表中加入。

CREATE TABLE t1(col1   VARCHAR2 (1),col2   VARCHAR2 (1));

INSERT INTO t1 VALUES ('A', 'A');
INSERT INTO t1 VALUES ('A', 'B');
INSERT INTO t1 VALUES (NULL, 'A');
INSERT INTO t1 VALUES (NULL, 'B');
CREATE TABLE t2 AS SELECT * FROM t1;
INSERT INTO t1 VALUES (NULL, 'B');

选择查询:

SELECT NVL (count_1, 0) + NVL (count_2, 0) AS TOTAL, col1, col2
  FROM (  SELECT col1, col2, COUNT (1) count_1
            FROM t1
        GROUP BY col1, col2) t1
       FULL OUTER JOIN (  SELECT col1, col2, COUNT (1) count_2
                            FROM t2
                        GROUP BY col1, col2) t2
          USING (col1, col2)

结果:

TOTAL   COL1    COL2
2       A       A
2       A       B
1               A
1               B
2               B
1               A

令人失望的结果

TOTAL   COL1    COL2
2       A       A
2       A       B
2               A
3               B

我尝试过使用

nvl(col1,'N'), nvl(col2,'N')

然而,这会产生语法错误,因此我不能以某种方式正确使用它。

CASE WHEN col1 IS NULL THEN 'N' ELSE 'Y' END

使情况变得更糟:

1   A   A
1   A   B
1       A
2       B
1   A   Y
1   A   Y
1       N
1       N

如何达到预期效果?

1 个答案:

答案 0 :(得分:2)

试试这个:

select count(*),col1,col2 from
(
 select col1,col2 from t1
 union all
 select col1,col2 from t2
)
group by col1,col2;