ray88’s diary

お仕事で困ったとき用の自分用の覚書

SQL指南書 ソート用の列を作成する(ORDER BY句にCASE式を使用)

SQL 指南書集 目次 - ray88’s diary
【お題】
以下の表を並べ替えする。key「B→A→D→C」の順番に並べ替える

【回答】

/* 演習問題3:ORDER BY でソート列を作る(p.288) */
SELECT *
  FROM Greatests
 ORDER BY CASE key
            WHEN 'B' THEN 1
            WHEN 'A' THEN 2
            WHEN 'D' THEN 3
            WHEN 'C' THEN 4
            ELSE NULL END;


【ソート列も含めて出力する場合】

/* ソート列も結果に含める(p.288) */
SELECT key
       ,CASE key
         WHEN 'B' THEN 1
         WHEN 'A' THEN 2
         WHEN 'D' THEN 3
         WHEN 'C' THEN 4
         ELSE NULL END AS sort_col
	   ,x
	   ,y
	   ,z
  FROM Greatests
 ORDER BY sort_col;


【参考】テーブル作成用SQL

/* 演習問題1-1:複数列の最大値(1-3とも兼用) */
CREATE TABLE Greatests
(key CHAR(1) PRIMARY KEY,
 x   INTEGER NOT NULL,
 y   INTEGER NOT NULL,
 z   INTEGER NOT NULL);

INSERT INTO Greatests VALUES('A', 1, 2, 3);
INSERT INTO Greatests VALUES('B', 5, 5, 2);
INSERT INTO Greatests VALUES('C', 4, 7, 1);
INSERT INTO Greatests VALUES('D', 3, 3, 8);