2017-03-15 9 views
0

に私はSQL Oracleで異なるフィールドからいくつかの値使用を選択した場合の結果は、他の選択

select 
     field01 
     ,field02 
     ,case field03 
      when 'calc1' then field01 - field02 
      when 'calc2' then field01 + field02 
     end as AmountCalc 
     ,case AmountCalc 
      when 0 then 'amount is 0' 
      else 'Greater than 0' 
     end as result 
from myTable 

は、クエリが第二case文でフィールド「AmountCalc」を認識していないcase文で計算する必要があります。

アイデア?

+0

正しいです。これは、SQLがどのように動作するのか、Oracleの動作方法です。列エイリアスは、定義されている同じクエリで再利用することはできません。 –

+0

ケース式であり、ステートメントではありません。 – jarlh

答えて

1

はこれで選択してcase文を交換し、

case (case field03 
       when 'calc1' then field01 - field02 
       when 'calc2' then field01 + field02 
      end) when 0 then 'amount is 0' 
       else 'Greater than 0' 
      end as result 
+0

素敵な解決策、それは私のために働く。 多くのおかげでトム¡ – Jam

+0

答えの横のチェックボックスをオンにして回答を受け入れることを自由に感じてください:) –

0

あなたはネストされたクエリでこれを達成することができます

select field01 
    , field02 
    , AmountCalc 
    , case AmountCalc 
      when 0 then 'amount is 0' 
      else 'Greater than 0' 
     end as result 
from 
(select field01 
     , field02 
     , case field03 
       when 'calc1' then field01 - field02 
       when 'calc2' then field01 + field02 
     end as AmountCalc 
    from myTable 
) 
+0

これは私にとってはうまくいくかもしれませんが、いくつかのネストされたクエリと結合のために簡単ではありません。私は単純化されたバージョンを投稿しました。 ありがとうございます。 – Jam

関連する問題