sql >> Database teknologi >  >> RDS >> Oracle

Pivotering af rækker til kolonner dynamisk i Oracle

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.



  1. Specialbygget statistik

  2. Hvordan kan jeg bruge mysqli_fetch_array() to gange?

  3. 2 måder at returnere rækker, der kun indeholder ikke-alfanumeriske tegn i MariaDB

  4. java.lang.OutOfMemoryError:[hukommelse opbrugt] under læsning af data fra Sqlite Android