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