テーブル 区分 列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
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関数による他分岐を使って、 区分の値に応じたソートキーに変換してます。