1
複数のテーブルからすべての一意の行を選択しようとしていますが、テーブル全体で同じである場合は合計をtogtherに追加します。NULL値でグループ化する
2つのテーブルの列に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
2 A
3 B
TOTAL COL1 COL2
2 A A
2 A B
1 A
1 B
2 B
1 A
Disired結果
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
どのように私は望ましい結果を達成することができますか?
は(私はそれがこの方法で行われなければならなかった理由があるかもしれないとパフォーマンスにそれをテストする必要があります)。私は、最も簡単なオプションが常に最高だと思います! –
独自のテストのために、元のクエリが機能するようにするには、完全な外部結合の結合条件を 'using(col1、col2)'から 'ON(NVL(t1.col1) '{NULL {NULL} ')= NVL(t2.col2、' {NULL} ')) 'NVL(t2.col1、' {NULL} ') – Boneist