Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Memutar baris menjadi kolom secara dinamis di Oracle

Oracle 11g menyediakan PIVOT operasi yang melakukan apa yang Anda inginkan.

Solusi Oracle 11g

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

(Catatan:Saya tidak memiliki salinan 11g untuk menguji ini, jadi saya belum memverifikasi fungsinya)

Saya memperoleh solusi ini dari:http://orafaq.com/wiki/PIVOT

EDIT -- opsi pivot xml (juga Oracle 11g)
Ternyata ada juga pivot xml pilihan ketika Anda tidak mengetahui semua kemungkinan judul kolom yang mungkin Anda perlukan. (lihat JENIS XML bagian di dekat bagian bawah halaman yang terletak di 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) )

(Catatan:Seperti sebelumnya saya tidak memiliki salinan 11g untuk menguji ini, jadi saya belum memverifikasi fungsinya)

Edit2: Mengubah v di pivot dan pivot xml pernyataan ke max(v) karena seharusnya dikumpulkan seperti yang disebutkan dalam salah satu komentar. Saya juga menambahkan in klausa yang bukan opsional untuk pivot . Tentu saja, harus menentukan nilai dalam in klausa mengalahkan tujuan memiliki kueri pivot/tab silang yang sepenuhnya dinamis seperti keinginan poster pertanyaan ini.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah Oracle mengizinkan opsi baca yang tidak dikomit?

  2. Nilai yang berbeda dihitung pada kolom yang sama

  3. Kesalahan SQL:ORA-02291:batasan integritas

  4. Agregat Oracle untuk menggabungkan string dengan koma, dan tentang menulis agregat khusus

  5. Apakah ada fungsi hash di PL/SQL?