Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Dynamisches Pivotieren von Zeilen in Spalten in Oracle

Oracle 11g bietet einen PIVOT Vorgang, der tut, was Sie wollen.

Oracle 11g-Lösung

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

(Hinweis:Ich habe keine Kopie von 11g, um dies zu testen, daher habe ich seine Funktionalität nicht überprüft)

Ich habe diese Lösung erhalten von:http://orafaq.com/wiki/PIVOT

EDIT -- Pivot-XML-Option (auch Oracle 11g)
Anscheinend gibt es auch eine pivot xml Option, wenn Sie nicht alle möglichen Spaltenüberschriften kennen, die Sie möglicherweise benötigen. (siehe XML-TYP Abschnitt unten auf der Seite unter 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) )

(Hinweis:Wie zuvor habe ich keine Kopie von 11g, um dies zu testen, also habe ich seine Funktionalität nicht überprüft)

Edit2: v geändert im pivot und pivot xml Anweisungen an max(v) da es wie in einem der Kommentare erwähnt aggregiert werden soll. Ich habe auch den in hinzugefügt -Klausel, die für pivot nicht optional ist . Natürlich müssen die Werte im in angegeben werden -Klausel vereitelt das Ziel, eine vollständig dynamische Pivot-/Kreuztabellenabfrage zu haben, wie es der Wunsch des Posters dieser Frage war.