テーブル FieldA FieldB FieldC FieldD ------ ------ ------ ------ 5 5 8 9 5 7 8 9 7 5 8 9 Oracle8のSQLで、 FieldAがFieldBより小さい場合は、FieldCを、 そうでない場合はFieldDを取得する 出力結果 FieldA FieldB FieldC FieldD Val ------ ------ ------ ------ --- 5 5 8 9 9 5 7 8 9 8 7 5 8 9 9
select FieldA,FieldB,FieldC,FieldD, decode(sign(FieldA-FieldB),-1,FieldC,FieldD) as Val from (select 5 as FieldA,5 as FieldB,8 as FieldC,9 as FieldD from dual union select 5,7,8,9 from dual union select 7,5,8,9 from dual);
FieldAがFieldBより小さいというのは、 不等式で表すと、 FieldA < FieldB となり、移項して、 FieldA - FieldB < 0 として、sign関数を使ってます