Я пытаюсь выбрать все уникальные строки из нескольких таблиц и где они одинаковы в таблицах, добавьте итоговые значения togther.Группа по значениям NULL
Это работает нормально, за исключением случаев, когда в столбце по двум таблицам указаны значения 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
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
Как можно достичь желаемого результата?
Это похоже на то, что я хочу с точки зрения результата (я должен проверить его на производительность, так как может быть причина, почему это должно было быть сделано таким образом). Я думаю, что самые простые варианты всегда самые лучшие! –
Для вашего собственного тестирования, чтобы получить исходный запрос, вам необходимо изменить условие соединения полного внешнего соединения с 'using (col1, col2)' на что-то вроде 'ON (NVL (t1.col1, '{NULL } ') = NVL (t2.col1,' {NULL} ') И NVL (t1.col2,' {NULL} ') = NVL (t2.col2,' {NULL} ')) ' – Boneist