Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengubah Baris Secara Dinamik ke Lajur dalam Oracle?

Bagaimana untuk Mengubah Baris Secara Dinamik ke Lajur dalam Oracle?

Patricia Arquette
Patricia Arquetteasal
2025-01-06 14:23:44514semak imbas

How to Dynamically Pivot Rows into Columns in Oracle?

Memusing Baris ke Lajur Secara Dinamik dalam Oracle

Anda mempunyai jadual dengan pasangan kunci dan nilai dalam Oracle 10g dan ingin mengubahnya menjadi jadual dengan lajur untuk setiap kunci unik, dengan nilai yang sepadan dalam setiap baris. Jadual yang terhasil hendaklah melaraskan secara dinamik kepada mana-mana pasangan nilai kunci baharu yang ditambahkan pada jadual asal.

Penyelesaian Oracle 11g

Oracle 11g memperkenalkan operasi PIVOT, yang membolehkan anda melakukan pemutaran dinamik sedemikian:

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

Pertanyaan ini akan membuat jadual dengan lajur untuk setiap empat kunci dinyatakan dalam klausa IN.

Pilihan Pemansi XML

Oracle 11g juga menyediakan pilihan XML pangsi yang membolehkan anda mengendalikan tajuk lajur yang tidak diketahui:

select * from
(select id, k, v from _kv)
pivot xml(max(v) for k in (any))

Pertanyaan ini akan menghasilkan set hasil XML, di mana setiap lajur sepadan dengan kunci unik, dan nilai yang berkaitan disimpan sebagai elemen XML nilai.

Nota:

  • Penyelesaian yang disediakan mengandaikan bahawa nilai untuk setiap kunci diagregatkan (maks digunakan), tetapi anda boleh melaraskan fungsi agregat mengikut keperluan.
  • Adalah penting untuk ambil perhatian bahawa walaupun pilihan XML pangsi membenarkan sebarang bilangan lajur yang tidak diketahui, ia memerlukan menyatakan lajur dalam klausa IN, yang mungkin tidak selalu boleh dilaksanakan.

Atas ialah kandungan terperinci Bagaimana untuk Mengubah Baris Secara Dinamik ke Lajur dalam Oracle?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn