按空值分组
我试图从多个表中选择所有唯一的行,如果它们在表中是相同的,则将总数相加。
这是正常工作的,除了在两个表的列中有空值的情况。在每个单独的表中,它们被分组在一起,但没有在下表中联接。
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