昇順、降順のソートならorder by asc descを用いれば実現できるが、任意の順でソートを行いたい場合、case式を使うことで実現できるようだ。
以下のようなデータを持つテーブルがある。
| tbl_key | x | y | z |
+---------+------+------+------+
| A | 1 | 2 | 3 |
| B | 5 | 5 | 2 |
| C | 4 | 7 | 1 |
| D | 3 | 3 | 8 |
+---------+------+------+------+
結果順をtbl_keyのB-A-D-Cにしたい場合
SELECT
*
FROM Greatests
ORDER BY
CASE tbl_key
WHEN 'B' THEN 1
WHEN 'A' THEN 2
WHEN 'D' THEN 3
WHEN 'C' THEN 4
ELSE NULL END;
-- 結果
+---------+------+------+------+
| tbl_key | x | y | z |
+---------+------+------+------+
| B | 5 | 5 | 2 |
| A | 1 | 2 | 3 |
| D | 3 | 3 | 8 |
| C | 4 | 7 | 1 |
+---------+------+------+------+
こちらを参考にさせていただきました。
達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ