トップページに戻る    次のSQLパズルへ    前のSQLパズルへ

10-79 不等式の移項

SQLパズル

テーブル
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


SQL

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関数を使ってます