Vous ne pouvez pas placer une instruction dynamique dans l'instruction IN de PIVOT sans utiliser PIVOT XML, qui produit une sortie moins que souhaitable. Cependant, vous pouvez créer une chaîne IN et l'entrer dans votre instruction.
Tout d'abord, voici mon exemple de tableau ;
myNumber myValue myLetter
---------- ---------- --------
1 2 A
1 4 B
2 6 C
2 8 A
2 10 B
3 12 C
3 14 A
Configurez d'abord la chaîne à utiliser dans votre instruction IN. Ici, vous mettez la chaîne dans "str_in_statement". Nous utilisons COLUMN NEW_VALUE et LISTAGG pour configurer la chaîne.
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);
Votre chaîne ressemblera à :
'A' AS A,'B' AS B,'C' AS C
Utilisez maintenant l'instruction String dans votre requête PIVOT.
SELECT * FROM
(SELECT myNumber, myLetter, myValue FROM myTable)
PIVOT (Sum(myValue) AS val FOR myLetter IN (&str_in_statement));
Voici la sortie :
MYNUMBER A_VAL B_VAL C_VAL
---------- ---------- ---------- ----------
1 2 4
2 8 10 6
3 14 12
Il y a cependant des limites. Vous ne pouvez concaténer une chaîne que jusqu'à 4000 octets.