我试图从多个表中选择所有唯一行,并且在表中它们相同的位置添加总计。
这是正常的,除了在两个表中的列中存在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
如何达到预期效果?
答案 0 :(得分:2)
试试这个:
select count(*),col1,col2 from
(
select col1,col2 from t1
union all
select col1,col2 from t2
)
group by col1,col2;