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