prefecturesテーブルのprefecture'カラムからレコードを取得する場合を例に、
私が思いついた方法をご説明します。
ただ、手元にSQLServerがないため、MySQLで動作確認しております。
おそらくSQLServerでも動作すると思いますが、、
Before
sql
1mysql> SELECT
2 -> *
3 -> FROM prefectures
4 -> WHERE prefecture IN ('Tokyo', 'Hiroshima', 'Saga');
5+------------+
6| prefecture |
7+------------+
8| Saga |
9| Tokyo |
10| Hiroshima |
11+------------+
123 rows in set (0.00 sec)
After
sql
1mysql> SELECT
2 -> *,
3 -> CASE prefecture
4 -> WHEN 'Tokyo' THEN 0
5 -> WHEN 'Hiroshima' THEN 1
6 -> WHEN 'Saga' THEN 2
7 -> END sort_order
8 -> FROM prefectures
9 -> WHERE prefecture IN ('Tokyo', 'Hiroshima', 'Saga')
10 -> ORDER BY sort_order;
11+------------+------------+
12| prefecture | sort_order |
13+------------+------------+
14| Tokyo | 0 |
15| Hiroshima | 1 |
16| Saga | 2 |
17+------------+------------+
183 rows in set (0.00 sec)
結果セットにsort_order
という余計なカラムを含みたくない場合、
以下のように1レベル上のSELECT文でラップします。
sql
1mysql> SELECT tmp.prefecture
2 -> FROM (
3 -> SELECT
4 -> *,
5 -> CASE prefecture
6 -> WHEN 'Tokyo' THEN 0
7 -> WHEN 'Hiroshima' THEN 1
8 -> WHEN 'Saga' THEN 2
9 -> END sort_order
10 -> FROM prefectures
11 -> WHERE prefecture IN ('Tokyo', 'Hiroshima', 'Saga')
12 -> ORDER BY sort_order
13 -> ) AS tmp;
14+------------+
15| prefecture |
16+------------+
17| Tokyo |
18| Hiroshima |
19| Saga |
20+------------+
213 rows in set (0.01 sec)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。