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:https://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 https://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.