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.