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:http://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 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) )
(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.