Posted at

【SQL Server】ORDER BY句で条件分岐させる

More than 3 years have passed since last update.

一覧表などで並び順を任意の項目で並び替えるための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と行うことができたら楽になったのかなあと思うんだけど、

それはちとできないようだということで、こんな感じになりました。