La définition de la clause PIVOT par Oracle indique qu'il est possible de définir une sous-requête dans la clause IN
. Un exemple fictif de ce que j’imaginerais est-ce
... PIVOT (AVG(salary) FOR (company) IN (SELECT DISTINCT company FROM companies))
Avec cela, cependant, je reçois une erreur ORA-00936: Missing expression
. Malheureusement, les erreurs de cette nouvelle clause PIVOT
sont généralement plutôt cryptiques. Quelqu'un peut-il me donner un bon exemple de la manière dont une sous-requête peut être utilisée dans la clause IN
de la clause PIVOT
?
Apparemment, j'étais trop paresseux pour lire jusqu'à la fin de la documentation ... Plus bas, la documentation indique:
sous-requête Une sous-requête est utilisée uniquement avec le mot-clé XML. Lorsque vous spécifiez une sous-requête, toutes les valeurs trouvées par la sous-requête sont utilisées pour le pivotement. [...]
Ça va marcher
PIVOT XML (AVG(salary) FOR (company) IN (SELECT DISTINCT company FROM companies))
Voir la documentation complète
http://docs.Oracle.com/cd/B28359_01/server.111/b28286/statements_10002.htm#CHDFAFIE
j'ai eu une exigence similaire. J'ai réalisé cela via pl sql a écrit un SQL dynamique et l'a ajouté à la clause pivot IN. Bien sûr, la requête pivot était également un SQL dynamique. Mais dans la clause de pivot normale, cela n’est pas possible avec SQL.