一覧表などで並び順を任意の項目で並び替えるためのSQLメモ書き。
仕様としては
・並び替えの対象となる項目→パラメータ@SortItemで指定(1~3で置き換え)
・「昇順」・「降順」→パラメータ@SortMethodで指定(1:昇順、2:降順)
というもの。
casewhenorderby.sql
ORDER BY
CASE @SortMethod WHEN "1" THEN
( CASE @SortItem
WHEN '1' THEN Name
WHEN '2' THEN Birthday
WHEN '3' THEN PhoneNumber
) END ASC,
CASE @SortMethod WHEN "2" THEN
( CASE @SortItem
WHEN '1' THEN Name
WHEN '2' THEN Birthday
WHEN '3' THEN PhoneNumber
) END DESC
「ORDER BYって条件分岐できるの…?」と疑問に思いましたが
CASE WHEN使えば難なくできました。というお話。
ほんとは昇順・降順も並び替え項目と同じく
1→ASC、2→DESCと行うことができたら楽になったのかなあと思うんだけど、
それはちとできないようだということで、こんな感じになりました。