1
我试图从多个表中选择所有的唯一行,并且它们在表中相同的位置添加合计togther。按空值分组
这是工作正常,除非在两个表中的列中有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查询:
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
我怎样才能达到预期的效果?
这看起来像我想要的结果而言(我需要测试它的性能,有可能是它为什么要做这样一个道理)。我想最简单的选择总是最好的! –
只是为了你自己的测试,为了让你的原始查询工作,你需要修改完整的外部连接的连接条件,从'使用(col1,col2)'到'ON(NVL(t1.col1,'{NULL }')= NVL(t2.col1,'{NULL}')AND NVL(t1.col2,'{NULL}')= NVL(t2.col2,'{NULL}'))' – Boneist