Sie können keine dynamische Anweisung in die IN-Anweisung von PIVOT einfügen, ohne PIVOT-XML zu verwenden, das eine weniger als wünschenswerte Ausgabe ausgibt. Sie können jedoch einen IN-String erstellen und in Ihre Anweisung eingeben.
Zuerst ist hier meine Beispieltabelle;
myNumber myValue myLetter
---------- ---------- --------
1 2 A
1 4 B
2 6 C
2 8 A
2 10 B
3 12 C
3 14 A
Richten Sie zuerst die Zeichenfolge ein, die in Ihrer IN-Anweisung verwendet werden soll. Hier fügen Sie die Zeichenfolge in "str_in_statement" ein. Wir verwenden COLUMN NEW_VALUE und LISTAGG, um die Zeichenfolge einzurichten.
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);
Ihre Zeichenfolge sieht folgendermaßen aus:
'A' AS A,'B' AS B,'C' AS C
Verwenden Sie nun die String-Anweisung in Ihrer PIVOT-Abfrage.
SELECT * FROM
(SELECT myNumber, myLetter, myValue FROM myTable)
PIVOT (Sum(myValue) AS val FOR myLetter IN (&str_in_statement));
Hier ist die Ausgabe:
MYNUMBER A_VAL B_VAL C_VAL
---------- ---------- ---------- ----------
1 2 4
2 8 10 6
3 14 12
Es gibt jedoch Einschränkungen. Sie können nur eine Zeichenfolge bis zu 4000 Bytes verketten.