Oracle 11g fornisce un PIVOT
operazione che fa quello che vuoi.
Soluzione Oracle 11g
select * from
(select id, k, v from _kv)
pivot(max(v) for k in ('name', 'age', 'gender', 'status')
(Nota:non ho una copia di 11g su cui testarlo, quindi non ne ho verificato la funzionalità)
Ho ottenuto questa soluzione da:http://orafaq.com/wiki/PIVOT
EDIT -- opzione pivot xml (anche Oracle 11g)
Apparentemente esiste anche un pivot xml
opzione per quando non conosci tutte le possibili intestazioni di colonna di cui potresti aver bisogno. (vedi il TIPO XML sezione nella parte inferiore della pagina situata all'indirizzo 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) )
(Nota:come prima non ho una copia di 11g su cui testarlo, quindi non ne ho verificato la funzionalità)
Modifica2: v
modificato nel pivot
e pivot xml
dichiarazioni a max(v)
poiché dovrebbe essere aggregato come menzionato in uno dei commenti. Ho anche aggiunto il in
clausola che non è facoltativa per pivot
. Ovviamente, dovendo specificare i valori nel in
La clausola vanifica l'obiettivo di avere una query pivot/crosstab completamente dinamica come era il desiderio del poster di questa domanda.