PIVOT XMLを使用せずに、動的ステートメントをPIVOTのINステートメントに入れることはできません。PIVOTXMLは、望ましい出力よりも少ない出力を出力します。ただし、IN文字列を作成して、ステートメントに入力することはできます。
まず、これが私のサンプルテーブルです;
myNumber myValue myLetter
---------- ---------- --------
1 2 A
1 4 B
2 6 C
2 8 A
2 10 B
3 12 C
3 14 A
まず、INステートメントで使用する文字列を設定します。ここでは、文字列を「str_in_statement」に入れています。文字列の設定には、COLUMNNEW_VALUEとLISTAGGを使用しています。
clear columns
COLUMN temp_in_statement new_value str_in_statement
SELECT DISTINCT
LISTAGG('''' || myLetter || ''' AS ' || myLetter,',')
WITHIN GROUP (ORDER BY myLetter) AS temp_in_statement
FROM (SELECT DISTINCT myLetter FROM myTable);
文字列は次のようになります:
'A' AS A,'B' AS B,'C' AS C
次に、PIVOTクエリでStringステートメントを使用します。
SELECT * FROM
(SELECT myNumber, myLetter, myValue FROM myTable)
PIVOT (Sum(myValue) AS val FOR myLetter IN (&str_in_statement));
出力は次のとおりです:
MYNUMBER A_VAL B_VAL C_VAL
---------- ---------- ---------- ----------
1 2 4
2 8 10 6
3 14 12
ただし、制限があります。 連結できる文字列は、4000バイトまでです。