IDに抜けがないのであれば、以下のようにします。
SELECT
MAX(CASE WHEN ID=1 THEN AA END) AA_1,
MAX(CASE WHEN ID=1 THEN AB END) AB_1,
MAX(CASE WHEN ID=1 THEN AC END) AC_1,
MAX(CASE WHEN ID=2 THEN AA END) AA_2,
MAX(CASE WHEN ID=2 THEN AB END) AB_2,
MAX(CASE WHEN ID=2 THEN AC END) AC_2,
MAX(CASE WHEN ID=3 THEN AA END) AA_3,
MAX(CASE WHEN ID=3 THEN AB END) AB_3,
MAX(CASE WHEN ID=3 THEN AC END) AC_3,
MAX(CASE WHEN ID=4 THEN AA END) AA_4,
MAX(CASE WHEN ID=4 THEN AB END) AB_4,
MAX(CASE WHEN ID=4 THEN AC END) AC_4,
(以下同様)
FROM TABLE
IDに抜けがある可能性があるならば、以下のようにROW_NUMBERをつかって
行番号を生成した上で、同じようにします。
SELECT
MAX(CASE WHEN SEQ=1 THEN AA END) AA_1,
MAX(CASE WHEN SEQ=1 THEN AB END) AB_1,
MAX(CASE WHEN SEQ=1 THEN AC END) AC_1,
MAX(CASE WHEN SEQ=2 THEN AA END) AA_2,
MAX(CASE WHEN SEQ=2 THEN AB END) AB_2,
MAX(CASE WHEN SEQ=2 THEN AC END) AC_2,
MAX(CASE WHEN SEQ=3 THEN AA END) AA_3,
MAX(CASE WHEN SEQ=3 THEN AB END) AB_3,
MAX(CASE WHEN SEQ=3 THEN AC END) AC_3,
MAX(CASE WHEN SEQ=4 THEN AA END) AA_4,
MAX(CASE WHEN SEQ=4 THEN AB END) AB_4,
MAX(CASE WHEN SEQ=4 THEN AC END) AC_4,
(以下同様)
FROM
(SELECT ROW_NUMBER() OVER (ORDER BY ID) SEQ,* FROM TABLE) t
ただし、もし、質問者さんが8行なら8×3=24列、100行なら100×3=300列
が返ってくるようなビューをイメージされているのであれば、それは不可能です(ビューの列数は固定です)。
どうしてもそのようなことをしたい場合は、ストアドプロシージャを使うことになります。
(ただし、ビューより結果の使い勝手は相当劣りますので、期待したものにはならないでしょう)
お礼
自分の環境でも正常に動き、 期待していた結果となりました。 ご丁寧に答えてくださり、 ありがとうございました。 またのとき、よろしくお願いします。