ORACLE SQL-基于逻辑对记录进行分类

ORACLE SQL-基于逻辑对记录进行分类,sql,oracle,Sql,Oracle,根据逻辑对记录进行分类的最佳方法是什么 例如,在此表中: ID House Farm 1 (null) (null) 我想输出: ID Missing 1 House 1 Farm 除了下面这些明显的结合,还有更好的方法吗?可能是什么时候?在处理更多的条件时,工会都不会轻易灵活 select ID, 'House' as Missing from table where house is null union all select ID, 'Farm' as Missing fro

根据逻辑对记录进行分类的最佳方法是什么

例如,在此表中:

ID House  Farm
1  (null) (null)
我想输出:

ID Missing
1  House
1  Farm
除了下面这些明显的结合,还有更好的方法吗?可能是什么时候?在处理更多的条件时,工会都不会轻易灵活

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

虽然我不知道它是否比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

这里是。

虽然我不知道它是否比
UNION ALL
更有效,但另一个选择是根据您使用的Oracle版本使用
UNPIVOT

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

这是结果。

请使用UNPIVOT检查结果。有关更多详细信息,请查看链接

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


请使用UNPIVOT检查结果。有关更多详细信息,请查看链接

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


什么版本的Oracle?在11g中,您可能会使用
UNPIVOT
操作符。Oracle的哪个版本?在11g中,您可能会使用
UNPIVOT
操作符。