PIVOT演算子を使用して、複数の集計項目をそれぞれ別の列で表示させるには?
DB:Oracle11g
①の表をPivot関係演算子を使用して、②のように出力する方法は
ないでしょうか?
(二つ以上の集計項目で、PIVOTを作ることは出来ないでしょうか?)
③のようにpivot関係演算子を使用したサブクエリを二つ作り、
結合すれば出来ますが、出来れば④のようなイメージでサブクエリを
使用しないでもPIVOTが作成できないかと思い、質問させていただき
ました。(実際には④のSQLは流すと実行エラーになります。)
いろいろ調べてもみつけられなかったので、もしご存知の方がいら
っしゃいましたら、ご教授いただけないでしょうか。
①wk_pivot_test表
COD COD VALUE1 VALUE2
--- --- ---------- ----------
C01 S01 1 11
C01 S02 2 12
C02 S01 3 13
C02 S02 4 14
↓↓↓
②期待結果
COD S01_VALUE1 S01_VALUE2 S02_VALUE1 S02_VALUE2
--- ---------- ---------- ---------- ----------
C01 1 11 2 12
C02 3 13 4 14
③
SELECT
A.code1,
A.S01 s01_value1,
B.S01 s01_value2,
A.S02 s02_value1,
B.S02 s02_value2
FROM
(
SELECT
*
FROM
(
SELECT
code1,
code2,
value1
FROM
wk_pivot_test
)
PIVOT
(
SUM(value1) FOR code2 IN ('S01' AS "S01", 'S02' AS "S02")
)
) A,
(
SELECT
*
FROM
(
SELECT
code1,
code2,
value2
FROM
wk_pivot_test
)
PIVOT
(
SUM(value2) FOR code2 IN ('S01' AS "S01", 'S02' AS "S02")
)
) B
WHERE
A.code1 = B.code1
ORDER BY
A.code1
;
④
SELECT
*
FROM
(
SELECT
code1,
code2,
value1,
value2
FROM
wk_pivot_test
)
PIVOT
(
SUM(value1), SUM(value2) FOR code2 IN ('S01' AS "S01", 'S02' AS "S02")
);
Edited by: user9245968 on 2011/06/20 2:02