Oracle 11g poskytuje PIVOT
operace, která dělá to, co chcete.
11g roztok Oracle
select * from
(select id, k, v from _kv)
pivot(max(v) for k in ('name', 'age', 'gender', 'status')
(Poznámka:Nemám kopii 11g, na které bych to mohl vyzkoušet, takže jsem neověřil jeho funkčnost)
Toto řešení jsem získal z:http://orafaq.com/wiki/PIVOT
UPRAVIT – možnost pivot xml (také Oracle 11g)
Zřejmě existuje také pivot xml
možnost, když neznáte všechna možná záhlaví sloupců, která byste mohli potřebovat. (viz TYP XML sekce v dolní části stránky na adrese 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) )
(Poznámka:Stejně jako předtím nemám kopii 11g k testování, takže jsem neověřil jeho funkčnost)
Úprava2: Změněno in
v pivot
a pivot xml
příkazy na max(v)
protože to má být agregováno, jak je uvedeno v jednom z komentářů. Také jsem přidal in
klauzule, která není volitelná pro pivot
. Samozřejmě je nutné zadat hodnoty v in
klauzule maří cíl mít zcela dynamický pivot/konverzní dotaz, jak bylo přáním plakátu této otázky.