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

10-157 桁数で場合分け

SQLパズル

SortTestTable
Val
---
 00
 01
 02
 07
 08
 88
 89
 90
 91

文字列型の数値を、以下の順序で出力する。
最初に、2桁でない数を、降順に出力
次に、2桁の数を、降順に出力

出力結果
Val
---
 08
 07
 02
 01
 00
 91
 90
 89
 88

こちらを参考にさせていただきました(英語)


データ作成スクリプト

create table SortTestTable as
select '00' as Val from dual
union select '01' from dual
union select '02' from dual
union select '07' from dual
union select '08' from dual
union select '88' from dual
union select '89' from dual
union select '90' from dual
union select '91' from dual;


SQL

select Val
  from SortTestTable
order by
case when substr(Val,1,1) = '0' then Val end desc nulls Last,
Val desc;


解説

case式を使って、桁数で場合分けしてます

脳内ソートは、こんな感じです
ソート前    第1ソートキーでソート後
Val         Val
---         -----------------------
 00          08
 01          07
 02          02
 07          01
 08          00
 88          88  89  90  91
 89
 90
 91

場合分けの資料