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.