Du kan ikke sætte en dynamisk sætning i PIVOT's IN-sætning uden at bruge PIVOT XML, som udsender noget mindre end ønsket output. Du kan dog oprette en IN-streng og indtaste den i din erklæring.
Først, her er min eksempeltabel;
myNumber myValue myLetter
---------- ---------- --------
1 2 A
1 4 B
2 6 C
2 8 A
2 10 B
3 12 C
3 14 A
Indstil først den streng, der skal bruges i din IN-sætning. Her sætter du strengen ind i "str_in_statement". Vi bruger COLUMN NEW_VALUE og LISTAGG til at opsætte strengen.
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);
Din streng vil se sådan ud:
'A' AS A,'B' AS B,'C' AS C
Brug nu String-sætningen i din PIVOT-forespørgsel.
SELECT * FROM
(SELECT myNumber, myLetter, myValue FROM myTable)
PIVOT (Sum(myValue) AS val FOR myLetter IN (&str_in_statement));
Her er outputtet:
MYNUMBER A_VAL B_VAL C_VAL
---------- ---------- ---------- ----------
1 2 4
2 8 10 6
3 14 12
Der er dog begrænsninger. Du kan kun sammenkæde en streng på op til 4000 bytes.