sql >> Database >  >> RDS >> Oracle

Rijen dynamisch in kolommen draaien in Oracle

Oracle 11g biedt een PIVOT bewerking die doet wat u wilt.

Oracle 11g-oplossing

select * from
(select id, k, v from _kv) 
pivot(max(v) for k in ('name', 'age', 'gender', 'status')

(Opmerking:ik heb geen exemplaar van 11g om dit op te testen, dus ik heb de functionaliteit niet geverifieerd)

Ik heb deze oplossing verkregen van:http://orafaq.com/wiki/PIVOT

BEWERK -- pivot xml-optie (ook Oracle 11g)
Blijkbaar is er ook een pivot xml optie voor als u niet alle mogelijke kolomkoppen kent die u nodig heeft. (zie het XML-TYPE sectie onderaan de pagina op 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) )

(Opmerking:zoals voorheen heb ik geen exemplaar van 11g om dit op te testen, dus ik heb de functionaliteit niet geverifieerd)

Bewerken2: Gewijzigd v in de pivot en pivot xml statements naar max(v) omdat het wordt verondersteld te worden geaggregeerd zoals vermeld in een van de opmerkingen. Ik heb ook de in . toegevoegd clausule die niet optioneel is voor pivot . Natuurlijk, de waarden moeten specificeren in de in clausule verslaat het doel van het hebben van een volledig dynamische spil/kruistabel-query, zoals de wens van de poster van deze vraag was.



  1. Een getal opmaken als valuta in SQLite

  2. Hoe db-verbindingen op de server te beheren?

  3. Databases en tabellen weergeven in PostgreSQL

  4. SQL TUSSEN-operator voor beginners