2013-02-16 3 views
2

Каков наилучший способ классифицировать записи на основе логики?ORACLE SQL - классификация записей на основе логики

Например, из этой таблицы:

ID House Farm 
1 (null) (null) 

Я хотел бы вывод:

ID Missing 
1 House 
1 Farm 

Помимо очевидного UNION все ниже, есть лучший способ? Может быть, когда? UNION ALL не будет легко гибким при работе с большим количеством условий.

select ID, 'House' as Missing from table where house is null 
union all 
select ID, 'Farm' as Missing from table where farm is null 
+0

Какую версию Oracle? В 11g вы можете использовать оператор 'UNPIVOT'. –

ответ

3

Пока я не знаю, если это более эффективно, чем UNION ALL, другой вариант заключается в использовании UNPIVOT в зависимости от версии Oracle вы используете:

SELECT ID, Missing 
FROM (
    SELECT * 
    FROM YourTable 
    UNPIVOT INCLUDE NULLS (IsMissing FOR Missing IN (House as 'House', Farm as 'Farm')) 
) t 
WHERE IsMissing IS NULL 

А вот SQL Fiddle.

+0

Wow sqlfiddle - это круто! –

1

Пожалуйста, проверьте результат, используя UNPIVOT. Проверьте ссылки pivot and unpivot queries in 11g, PIVOT and UNPIVOT Operators in Oracle Database 11g Release 1 для получения более подробной информации.

SELECT 
    ID, MISSING 
FROM 
(
    SELECT ID, NVL(HOUSE, 1) HOUSE, NVL(FARM, 1) FARM FROM YourTable 
)x 
UNPIVOT (
DCol 
FOR MISSING 
IN (HOUSE, FARM) 
); 

или

SELECT 
    ID, MISSING 
FROM YourTable 
UNPIVOT INCLUDE NULLS (
DCol 
FOR MISSING 
IN (HOUSE, FARM) 
); 
Смежные вопросы