2012-01-06 108 views
20

Oracle definition of the PIVOT clause especifica que existe la posibilidad de definir una subconsulta en la cláusula IN. Un ejemplo ficticio de lo que me imagino que se trata es de esteEjemplo de una cláusula Oracle PIVOT con subconsulta

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

Con ello, sin embargo, me sale un error ORA-00936: Missing expression. Lamentablemente, los errores de esta nueva cláusula PIVOT suelen ser bastante crípticos. ¿Alguien puede darme un buen ejemplo de cómo se puede utilizar una subconsulta en la cláusula IN de la cláusula PIVOT?

+1

Gracias por el descubrimiento. Me rendí mucho antes de leer incluso la mitad de esa documentación. – tumchaaditya

Respuesta

20

Al parecer, yo era demasiado perezoso para leer hasta el final de la documentación ... Más abajo, la documentación indica:

subconsulta Una subconsulta se utiliza sólo en combinación con la palabra clave XML. Cuando especifica una subconsulta, todos los valores encontrados por la subconsulta se utilizan para pivotar. [...]

Esto funcionará

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

Véase la documentación completa

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

+3

Así que vi que esto devuelve resultados en formato XML. ¿Alguna idea de cómo obtener una salida normal (tabla) como PIVOT simple daría? – tumchaaditya

+0

@tumchaaditya: No estoy seguro de si eso es posible. Pero para estar seguro, siéntase libre de hacer una nueva pregunta sobre el Desbordamiento de pila. Y enlace desde aquí, tengo curiosidad, yo mismo ... –

+1

Terminé construyendo dinámicamente los resultados de esa subconsulta fuera del SQL con pivote. Quiero decir, ejecuto la subconsulta por separado y canalizo esa salida a la consulta principal – tumchaaditya

Cuestiones relacionadas