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

7-4 decode関数でソートキーに変換

SQLパズル

テーブル
区分  列1  列2   列3
----  ---  ---  ---
1     002  XXX  XXX
1     004  XXX  XXX
2     XXX  001  XXX
3     XXX  XXX  003

区分が1の時は列1、区分が2の時は列2、区分が3の時は列3をソートキーとして、
昇順に出力する。

出力結果
区分  列1  列2  列3
----  ---  ---  ---
2     XXX  001  XXX
1     002  XXX  XXX
3     XXX  XXX  003
1     004  XXX  XXX


SQL

select 区分,列1,列2,列3
from (select 1 as 区分,'002' as 列1,'XXX' as 列2,'XXX' as 列3 from dual
      union select 1,'004','XXX','XXX' from dual
      union select 2,'XXX','001','XXX' from dual
      union select 3,'XXX','XXX','003' from dual)
order by decode(区分,1,列1,2,列2,3,列3);


解説

decode関数による他分岐を使って、
区分の値に応じたソートキーに変換してます。