web-dev-qa-db-fra.com

Exemple de clause Oracle PIVOT avec sous-requête

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?

21
Lukas Eder

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

22
Lukas Eder

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.

0
Harshita