SQLのORDER句でCASE文を使用する
環境
Microsoft SQL Server
テーブル
テーブルに、優先順位を表すフィールドがある。優先順位は上位のものにだけ存在し、「1」から順に番号が振られている。
大半のレコードには優先順位がなく、それらの値は「」である。
このとき、優先順位があるものを先に表示し、優先順位がないものは名称順で表示したい。
クエリ
ORDER句の中でCASE文を使用する。優先順位があればその値とし、なければ999としてソートを行う。
SELECT m.MachineId, m.MachineCd, SpecialPriority, IsDelete
FROM Machines m
WHERE m.IsDelete = 'False'
ORDER BY
CASE WHEN m.SpecialPriority=''
THEN 999
ELSE CONVERT(INT, m.SpecialPriority)
END