Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Girando linhas em colunas dinamicamente no Oracle


O Oracle 11g fornece um PIVOT operação que faz o que você quer.

Solução Oracle 11g
select * from
(select id, k, v from _kv) 
pivot(max(v) for k in ('name', 'age', 'gender', 'status')

(Observação:não tenho uma cópia do 11g para testar isso, então não verifiquei sua funcionalidade)

Eu obtive esta solução de:http://orafaq.com/wiki/PIVOT

EDIT -- opção xml de pivô (também Oracle 11g)
Aparentemente, há também um pivot xml opção para quando você não conhece todos os títulos de coluna possíveis que você pode precisar. (consulte o TIPO XML seção próxima à parte inferior da página localizada em http://www.oracle.com/technetwork/articles/sql/11g-pivot-097235.html)
select * from
(select id, k, v from _kv) 
pivot xml (max(v)
for k in (any) )

(Observação:como antes, não tenho uma cópia do 11g para testar isso, então não verifiquei sua funcionalidade)

Edit2: v alterado no pivot e pivot xml declarações para max(v) uma vez que deve ser agregado conforme mencionado em um dos comentários. Eu também adicionei o in cláusula que não é opcional para pivot . Claro, ter que especificar os valores no in cláusula anula o objetivo de ter uma consulta dinâmica / crosstab completamente dinâmica, como era o desejo do pôster desta pergunta.