Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Menggabungkan Berbilang Baris ke Baris Tunggal dalam Oracle Tanpa Menggunakan Prosedur Tersimpan?

Bagaimanakah Saya Boleh Menggabungkan Berbilang Baris ke Baris Tunggal dalam Oracle Tanpa Menggunakan Prosedur Tersimpan?

Barbara Streisand
Barbara Streisandasal
2025-01-05 20:02:401029semak imbas

How Can I Concatenate Multiple Rows into a Single Row in Oracle Without Using a Stored Procedure?

Menggabungkan Berbilang Baris menjadi Baris Tunggal dalam Oracle Tanpa Prosedur Tersimpan

Apabila bekerja dengan data dalam Oracle, mungkin terdapat keadaan di mana anda perlu menggabungkan berbilang baris menjadi satu baris. Secara tradisinya, ini boleh dicapai menggunakan prosedur tersimpan. Walau bagaimanapun, terdapat penyelesaian yang lebih cekap dan mudah menggunakan klausa LISTAGG Oracle.

Klausa LISTAGG dalam Oracle

Diperkenalkan dalam Oracle 11gR2, klausa LISTAGG membenarkan anda untuk menggabungkan berbilang nilai ke dalam satu rentetan. Ia memerlukan sintaks berikut:

LISTAGG(expression, delimiter) WITHIN GROUP (ORDER BY column)
  • ungkapan: Lajur atau ungkapan yang anda ingin gabungkan.
  • pembatas: The pemisah yang anda mahu gunakan antara nilai (cth., a koma).
  • lajur: Lajur yang digunakan untuk menyusun nilai dalam setiap kumpulan.

Contoh

Pertimbangkan set data berikut:

question_id element_id
1 7
1 8
2 9
3 10
3 11
3 12

Untuk menggabungkan nilai element_id bagi setiap question_id ke dalam satu baris, kita boleh menggunakan pertanyaan berikut:

SELECT question_id,
       LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id)
FROM your_table
GROUP BY question_id;

Output

question_id element_id
1 7,8
2 9
3 10,11,12

Pertimbangan untuk Rentetan Hasil Besar

Jika rentetan yang terhasil dijangka melebihi 4000 aksara (panjang maksimum untuk jenis data VARCHAR2), anda boleh menggunakan peningkatan berikut yang diperkenalkan dalam Oracle 12cR2:

SELECT question_id,
       LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id) ON OVERFLOW TRUNCATE/ERROR
FROM your_table
GROUP BY question_id;
  • ON LIMPAH POTONG: Memotong rentetan hasil jika melebihi panjang yang ditentukan.
  • RALAT LIMPAHAN: Menimbulkan ralat jika rentetan hasil melebihi panjang yang ditentukan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggabungkan Berbilang Baris ke Baris Tunggal dalam Oracle Tanpa Menggunakan Prosedur Tersimpan?. 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