Oracle 11g giver en PIVOT
operation, der gør, hvad du vil.
Oracle 11g-løsning
select * from
(select id, k, v from _kv)
pivot(max(v) for k in ('name', 'age', 'gender', 'status')
(Bemærk:Jeg har ikke en kopi af 11g at teste dette på, så jeg har ikke bekræftet dets funktionalitet)
Jeg fik denne løsning fra:http://orafaq.com/wiki/PIVOT
EDIT -- pivot xml-indstilling (også Oracle 11g)
Der er åbenbart også en pivot xml
mulighed for, når du ikke kender alle de mulige kolonneoverskrifter, som du muligvis har brug for. (se XML TYPE sektionen nær bunden af siden 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) )
(Bemærk:Som før har jeg ikke en kopi af 11g at teste dette på, så jeg har ikke bekræftet dets funktionalitet)
Rediger 2: Ændret v
i pivot
og pivot xml
sætninger til max(v)
da det formodes at være aggregeret som nævnt i en af kommentarerne. Jeg tilføjede også in
klausul, som ikke er valgfri for pivot
. Selvfølgelig skal du angive værdierne i in
klausul besejrer målet om at have en fuldstændig dynamisk pivot-/krydstabuleringsforespørgsel, som ønsket af dette spørgsmåls plakat.