Oracle 11g tillhandahåller en PIVOT
operation som gör vad du vill.
Oracle 11g-lösning
select * from
(select id, k, v from _kv)
pivot(max(v) for k in ('name', 'age', 'gender', 'status')
(Obs! Jag har ingen kopia av 11g att testa detta på så jag har inte verifierat dess funktionalitet)
Jag fick den här lösningen från:http://orafaq.com/wiki/PIVOT
REDIGERA -- pivot xml-alternativ (även Oracle 11g)
Det finns tydligen också en pivot xml
alternativ när du inte känner till alla möjliga kolumnrubriker som du kan behöva. (se XML-TYP avsnittet längst ner på sidan som finns på 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) )
(Obs:Som tidigare har jag inte en kopia av 11g att testa detta på så jag har inte verifierat dess funktionalitet)
Redigering2: Ändrade v
i pivot
och pivot xml
satser till max(v)
eftersom det är tänkt att aggregeras som nämnts i en av kommentarerna. Jag har också lagt till in
sats som inte är valfri för pivot
. Naturligtvis måste du ange värdena i in
klausul motverkar målet att ha en helt dynamisk pivot/korstabell-fråga, vilket var önskemålet från denna frågas affisch.