U kunt geen dynamische instructie in de IN-instructie van de PIVOT plaatsen zonder PIVOT XML te gebruiken, die minder dan wenselijke uitvoer oplevert. U kunt echter een IN-tekenreeks maken en deze in uw verklaring invoeren.
Ten eerste, hier is mijn voorbeeldtabel;
myNumber myValue myLetter
---------- ---------- --------
1 2 A
1 4 B
2 6 C
2 8 A
2 10 B
3 12 C
3 14 A
Stel eerst de tekenreeks in die u in uw IN-instructie wilt gebruiken. Hier zet je de string in "str_in_statement". We gebruiken COLUMN NEW_VALUE en LISTAGG om de string in te stellen.
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);
Je tekenreeks ziet er als volgt uit:
'A' AS A,'B' AS B,'C' AS C
Gebruik nu de String-instructie in uw PIVOT-query.
SELECT * FROM
(SELECT myNumber, myLetter, myValue FROM myTable)
PIVOT (Sum(myValue) AS val FOR myLetter IN (&str_in_statement));
Hier is de uitvoer:
MYNUMBER A_VAL B_VAL C_VAL
---------- ---------- ---------- ----------
1 2 4
2 8 10 6
3 14 12
Er zijn echter beperkingen. U kunt een string van maximaal 4000 bytes samenvoegen.