Oracle 11g biedt een PIVOT bewerking die doet wat u wilt.
Oracle 11g-oplossing
select * from
(select id, k, v from _kv)
pivot(max(v) for k in ('name', 'age', 'gender', 'status')
(Opmerking:ik heb geen exemplaar van 11g om dit op te testen, dus ik heb de functionaliteit niet geverifieerd)
Ik heb deze oplossing verkregen van:https://orafaq.com/wiki/PIVOT
BEWERK -- pivot xml-optie (ook Oracle 11g)
Blijkbaar is er ook een pivot xml optie voor als u niet alle mogelijke kolomkoppen kent die u nodig heeft. (zie het XML-TYPE sectie onderaan de pagina op 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) )
(Opmerking:zoals voorheen heb ik geen exemplaar van 11g om dit op te testen, dus ik heb de functionaliteit niet geverifieerd)
Bewerken2: Gewijzigd v in de pivot en pivot xml statements naar max(v) omdat het wordt verondersteld te worden geaggregeerd zoals vermeld in een van de opmerkingen. Ik heb ook de in . toegevoegd clausule die niet optioneel is voor pivot . Natuurlijk, de waarden moeten specificeren in de in clausule verslaat het doel van het hebben van een volledig dynamische spil/kruistabel-query, zoals de wens van de poster van deze vraag was.