ray88’s diary

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

SQL ソート用の列を非表示にして出力する

■以下のようなテーブルを列持ち→行持ちの値に変換した後、「employee」列を氏名順にソートする。
 SQLサーバはフリガナのない漢字に対してはきれいにソートはかからないことが多い。
  そのため、漢字にソートをかけるためには「フリガナ列」を設けてフリガナ列でソートするしかない。
  出力結果にソート用の列を表示させないようにするには以下のSQL文のように外部クエリでソートを行う


SQL文】
「kana」列をソートのためだけに使用し、最終的な出力結果には表示しない場合、外部クエリでソートを行う

SELECT final.employee, final.child
FROM (
    SELECT employee, kana, child_1 AS child FROM Personnel2
    UNION ALL
    SELECT employee, kana, child_2 AS child FROM Personnel2
    UNION ALL
    SELECT employee, kana, child_3 AS child FROM Personnel2
) AS final
ORDER BY final.kana;

テーブル作成用SQL

/* 外部結合で行列変換 その2(列→行):繰り返し項目を1 列にまとめる */
CREATE TABLE Personnel2
 (employee   varchar(32),
  kana       varchar(32), 
  child_1    varchar(32), 
  child_2    varchar(32), 
  child_3    varchar(32), 
  PRIMARY KEY(employee));

INSERT INTO Personnel2 VALUES('赤井','あかい', '一郎', '二郎', '三郎');
INSERT INTO Personnel2 VALUES('工藤','くどう', '春子', '夏子', NULL);
INSERT INTO Personnel2 VALUES('鈴木','すずき', '夏子', NULL,   NULL);
INSERT INTO Personnel2 VALUES('吉田','よしだ', NULL,   NULL,   NULL);