質問: 'テーブルデータ' order by TABLE_NAME のようにカラム名を取得する分を絡めればよさそうですがその先は検討が付きません。 助言などいただければ幸いです。
回答: SQL一本に収めるなら下記のような感じですかねぇ・・・。 ``` SELECT B.COLUMN_NAME , T.key , CASE B.COLUMN_NAME WHEN 'a' THEN T.a WHEN 'b' THEN T.b WHEN 'c' THEN T.c ELSE NULL END AS VAL FROM テーブルデータ T CROSS JOIN ( SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME != "key" AND TABLE_NAME = 'テーブルデータ' ) B ORDER BY B.COLUMN_NAME , T.key ``` ただ**CROSS JOIN**を行っている都合上パフォーマンス面に不安はあるのと、 カラム追加があると結局微々たる修正は必要です。 上記が許容できない場合はshi_ueさんの回答のようにストアド化するのがベストかと思います。 ストアドの内部で動的SQL化するとカラム追加があっても、 ストアド側の変更は不要となりますしね^^