Как UNION ALL возвращает пробелы в одном столбце и данные в другом?

У меня есть представление, в котором есть два оператора SELECT, возвращающие данные с использованием UNION ALL.

SELECT column1, column2, column3, column4
FROM table1
UNION ALL
SELECT column1, column2, column3, column4
FROM table2

Итак, все столбцы в table1 должны отображать данные, потому что column4 = 'A'. Однако в таблице 2 столбец 2 должен возвращать пробелы / ноль, поскольку столбец 4 = 'B'. Имейте в виду, что column2 в table2 ДЕЙСТВИТЕЛЬНО содержит данные, но в представлении мы хотим возвращать только пустые / пустые значения.


person user2425909    schedule 03.10.2014    source источник
comment
Предоставьте образцы данных и желаемый результат.   -  person PM 77-1    schedule 03.10.2014


Ответы (2)


Вы хотите что-то подобное.? Когда Column4 - это 'B', маска column2 как NULL или blanks. Можно использовать DECODE или даже CASE WHEN.

SELECT column1, column2, column3, column4
 FROM table1
 UNION ALL
 SELECT column1, DECODE(column4,'B',NULL,column2), column3, column4
 FROM table2

Несколько значений:

SELECT column1, column2, column3, column4
 FROM table1
UNION ALL
SELECT column1,
       CASE WHEN column4 IN ('B','D','O','R'..) THEN
          NULL
       ELSE
         column2
       END,
       column3,
       column4
FROM  table2
person Maheswaran Ravisankar    schedule 03.10.2014
comment
Именно то, что мне нужно. Итак, что, если у меня есть несколько значений в столбце 4, которые необходимо проверить на возврат NULL. В этом случае у нас уже есть «B» в запросе выше. Как указать дополнительные значения, например, D, R, O и т. Д.? - person user2425909; 03.10.2014

Вы можете выбрать литерал вместо данных столбца:

 SELECT column1, column2, column3, column4
 FROM table1
 UNION ALL
 SELECT column1, '-', column3, column4
 FROM table2

Я использовал '-' выше, но вы также можете выбрать NULL, ' ' или 0 (должен соответствовать типу данных столбца первого SELECT).

person Thilo    schedule 03.10.2014