2012-01-06 6 views
20

Oracle definition of the PIVOT clause указывает, что существует возможность определить подзапрос в предложении IN. Вымышленный пример того, что я хотел бы представить, что это этоПример предложения Oracle PIVOT с подзапросом

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

С этим, однако, я получаю сообщение об ошибке ORA-00936: Missing expression. К сожалению, ошибки из этого нового предложения PIVOT обычно довольно загадочны. Может ли кто-нибудь дать мне хороший пример того, как подзапрос может использоваться в предложении IN предложения PIVOT?

+1

Спасибо за открытие. Я сдался задолго до того, как прочитал даже половину этой документации. – tumchaaditya

ответ

20

Видимо, я был слишком ленив, чтобы прочитать до конца документации ... Далее вниз, в документации говорится:

подзапроса подзапрос используется только в сочетании с XML ключевым словом. Когда вы указываете подзапрос, все значения, найденные подзапросом, используются для поворота. [...]

Это будет работать

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

Смотрите полную документацию

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

+3

Итак, я увидел, что это возвращает результат в формате XML. Любая идея, как получить нормальный выход (таблица), как простой PIVOT, даст? – tumchaaditya

+0

@tumchaaditya: Я не уверен, что это возможно. Но, конечно, не стесняйтесь задавать новый вопрос о переполнении стека. И ссылку на него отсюда, мне любопытно, я сам ... –

+1

Я закончил создание результатов динамического подзапроса за пределами SQL с помощью pivot. Я имею в виду, что я запускаю подзапрос отдельно и канал, выводящий в основной запрос – tumchaaditya

Смежные вопросы