2014-10-03 4 views
1

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

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

Итак, все столбцы таблицы 1 должны отображать данные, потому что column4 = 'A'. Однако в таблице 2 столбец2 должен возвращать пробелы/null, потому что column4 = 'B'. Имейте в виду, что столбец2 в таблице2 содержит данные, но в представлении мы хотим вернуть пустые/нулевые значения.

+0

Предоставить образец данных и желаемый результат. –

ответ

1

Вы хотите что-то подобное.? Когда 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 
+0

Точно то, что мне нужно. Итак, что, если в столбце 4 есть несколько значений, которые должны быть проверены для возврата NULL. В этом случае у нас уже есть «B» в запросе выше. Как указать дополнительные значения, такие как D, R, O и т. Д.? – user2425909

1

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

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

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

+0

Отлично. Ваше решение тоже работает. Спасибо, Тило. – user2425909