web-dev-qa-db-ja.com

すべての列に加えて、Oracle 11gのCASEステートメントの結果をどのように選択しますか?

*を選択し、個々の列をすべて入力する必要はありませんが、caseステートメントを含むカスタム列も含めたいと思います。私は以下を試しました:

select *, (case when PRI_VAL = 1 then 'High'
                when PRI_VAL = 2 then 'Med'
                when PRI_VAL = 3 then 'Low'
          end) as PRIORITY
from MYTABLE;

しかし、それは不平を言っています

ORA-00923: FROM keyword not found where expected
23
Kevin Pauli

次のようにmytableのエイリアスを追加します。

select t.*, (case when PRI_VAL = 1 then 'High'
                when PRI_VAL = 2 then 'Med'
                when PRI_VAL = 3 then 'Low'
          end) as PRIORITY
from MYTABLE t;

これは特定のOracleバージョンに依存せず、他のデータベースについてはわかりません。

40
Thorsten

IronGoofyが言うように、テーブルエイリアスを追加します。

別の注意点として、状況に適した便利な検索ケース構文があることに注意してください。

select t.*,
       case PRI_VAL
         when 1 then 'High' 
         when 2 then 'Med' 
         when 3 then 'Low' 
       end as PRIORITY 
from MYTABLE t; 
7
David Aldridge