Du kan inte lägga in en dynamisk sats i PIVOT:s IN-sats utan att använda PIVOT XML, som matar ut något mindre än önskvärt. Du kan dock skapa en IN-sträng och mata in den i ditt uttalande.
Först, här är min exempeltabell;
myNumber myValue myLetter
---------- ---------- --------
1 2 A
1 4 B
2 6 C
2 8 A
2 10 B
3 12 C
3 14 A
Ställ först in strängen som ska användas i din IN-sats. Här lägger du strängen i "str_in_statement". Vi använder COLUMN NEW_VALUE och LISTAGG för att ställa in strängen.
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 sträng kommer att se ut så här:
'A' AS A,'B' AS B,'C' AS C
Använd nu String-satsen i din PIVOT-fråga.
SELECT * FROM
(SELECT myNumber, myLetter, myValue FROM myTable)
PIVOT (Sum(myValue) AS val FOR myLetter IN (&str_in_statement));
Här är utdata:
MYNUMBER A_VAL B_VAL C_VAL
---------- ---------- ---------- ----------
1 2 4
2 8 10 6
3 14 12
Det finns dock begränsningar. Du kan bara sammanfoga en sträng på upp till 4000 byte.