2012-01-06 18 views
20

Oracle definition of the PIVOT clause specifica che esiste la possibilità di definire una sottoquery nella clausola IN. Un esempio fittizio di quello che io immagino che questo sia questoEsempio di clausola PIVOT Oracle con sottoquery

... PIVOT (AVG(salary) FOR (company) IN (SELECT DISTINCT company FROM companies)) 

Con questo, però, ottengo un errore ORA-00936: Missing expression. Sfortunatamente, gli errori di questa nuova clausola PIVOT sono in genere piuttosto criptici. Qualcuno può darmi un buon esempio di come una subquery può essere utilizzata nella clausola della clausola PIVOT?

+1

Grazie per la scoperta. Mi sono arreso molto tempo prima di leggere anche metà della documentazione. – tumchaaditya

risposta

20

A quanto pare, ero troppo pigro per leggere fino alla fine della documentazione ... Più in basso, la documentazione afferma:

sottoquery Una sottoquery è utilizzata solo in combinazione con la parola chiave XML. Quando si specifica una sottoquery, tutti i valori trovati dalla subquery vengono utilizzati per la rotazione. [...]

Ciò funzionerà

PIVOT XML (AVG(salary) FOR (company) IN (SELECT DISTINCT company FROM companies)) 

Vedere la documentazione completa

http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_10002.htm#CHDFAFIE

+3

Quindi ho visto che questo restituisce l'output in formato XML. Qualche idea su come ottenere l'output normale (tabella) come normale PIVOT darebbe? – tumchaaditya

+0

@tumchaaditya: non sono sicuro che sia possibile. Ma per sicurezza, sentiti libero di chiedere una nuova domanda di Stack Overflow. E link da qui, sono curioso, me stesso ... –

+1

Ho finito per costruire i risultati di quella subquery dinamicamente al di fuori dell'SQL con pivot. Voglio dire, eseguo la subquery separatamente e reindirizza l'output alla query principale – tumchaaditya

Problemi correlati