按空值分组

我试图从多个表中选择所有唯一的行,如果它们在表中是相同的,则将总数相加。

这是正常工作的,除了在两个表的列中有空值的情况。在每个单独的表中,它们被分组在一起,但没有在下表中联接。

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

Disired结果

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

如何才能达到预期的效果?

转载请注明出处:http://www.guonuovip.com/article/20230401/1969806.html