2

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

例如,从此表中:

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
4

2 回答 2

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

于 2013-02-16T03:51:10.093 回答
1

请使用 UNPIVOT 检查结果。查看Oracle Database 11g 第 1 版中 11g 、 PIVOT 和 UNPIVOT 运算符中的链接pivot 和 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) 
);

或者

SELECT 
  ID, MISSING
FROM YourTable 
UNPIVOT INCLUDE NULLS (
DCol
FOR MISSING
IN  (HOUSE, FARM) 
);
于 2013-02-16T04:13:58.110 回答