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

より効率的かどうかはわかりませんが、使用しているOracleのバージョンに応じてUNION ALL別のオプションを使用することもできます。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

そして、これがSQLFiddleです。

于 2013-02-16T03:51:10.093 に答える
1

UNPIVOT を使用して結果を確認してください。詳細については、11g のリンクピボットおよびアンピボット クエリ、Oracle Database 11g リリース 1 の 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 に答える