Oracle 11g zapewnia PIVOT
operacja, która robi to, co chcesz.
Rozwiązanie Oracle 11g
select * from
(select id, k, v from _kv)
pivot(max(v) for k in ('name', 'age', 'gender', 'status')
(Uwaga:nie mam kopii 11g, aby to przetestować, więc nie zweryfikowałem jego funkcjonalności)
Otrzymałem to rozwiązanie z:http://orafaq.com/wiki/PIVOT
EDYTUJ – opcja pivot xml (również Oracle 11g)
Najwyraźniej istnieje również pivot xml
opcja, gdy nie znasz wszystkich możliwych nagłówków kolumn, których możesz potrzebować. (zobacz TYP XML sekcja u dołu strony znajdująca się pod adresem 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) )
(Uwaga:tak jak poprzednio nie mam kopii 11g, aby to przetestować, więc nie zweryfikowałem jego funkcjonalności)
Edycja2: Zmieniono v
w pivot
i pivot xml
instrukcje do max(v)
ponieważ ma być zagregowana, jak wspomniano w jednym z komentarzy. Dodałem również in
klauzula, która nie jest opcjonalna dla pivot
. Oczywiście, konieczność określenia wartości w in
klauzula niweczy cel, jakim jest posiadanie całkowicie dynamicznej kwerendy przestawnej/przestawnej, zgodnie z życzeniem autora tego pytania.