Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Dynamiczne przestawianie wierszy na kolumny w Oracle

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. W Oracle AS alias nie działa

  2. MySQL odpowiednik ORACLES rank()

  3. Wybierz losową próbkę wyników z wyniku zapytania

  4. Jak określić rozmiar tabel w Oracle?

  5. Wyszukaj określony ciąg w kolumnie Oracle clob