sql >> Databasteknik >  >> RDS >> Oracle

Pivotera rader till kolumner dynamiskt i Oracle

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.



  1. Hur man designar en mysql-databas med flera hyresgäster

  2. PostgreSQL installationer med hög tillgänglighet Patroni

  3. Hur man klassificerar, hittar och maskerar PII i databaser...

  4. Funktion med SQL-fråga har ingen destination för resultatdata