Menggabungkan Berbilang Baris Menjadi Satu Dalam Oracle
Untuk menggabungkan berbilang baris menjadi satu baris dalam Oracle tanpa menggunakan prosedur tersimpan, Oracle pengguna boleh menggunakan klausa LISTAGG. Klausa ini membenarkan penyatuan baris yang cekap berdasarkan pembatas yang ditentukan.
Senario Data:
Pertimbangkan data berikut:
question_id element_id 1 7 1 8 2 9 3 10 3 11 3 12
Keluaran yang Diingini:
Hasil yang diinginkan ialah gabungkan nilai element_id untuk setiap question_id, menghasilkan:
question_id element_id 1 7,8 2 9 3 10,11,12
Penyelesaian dengan LISTAGG:
Dari Oracle 11gR2 dan seterusnya, klausa LISTAGG boleh digunakan untuk mencapai ini penyambungan:
SELECT question_id, LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id) FROM YOUR_TABLE GROUP BY question_id;
Pertanyaan ini menggunakan Fungsi LISTAGG untuk menggabungkan nilai element_id dalam setiap kumpulan yang ditakrifkan oleh question_id. Klausa ORDER BY memastikan nilai disusun dalam setiap kumpulan sebelum penyatuan.
Limpahan Pengendalian:
Perhatikan bahawa jika rentetan gabungan yang terhasil melebihi panjang maksimum yang dibenarkan untuk jenis data (cth., 4000 aksara untuk VARCHAR2), Oracle versi 12cR2 dan kemudiannya menyediakan pilihan untuk menangani limpahan.
SELECT question_id, LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id) OVERFLOW TRUNCATE/ERROR FROM YOUR_TABLE GROUP BY question_id;
Pertanyaan ini menentukan klausa ON OVERFLOW TRUNCATE/ERROR untuk sama ada memotong atau menimbulkan ralat jika keputusan melebihi panjang maksimum.
Atas ialah kandungan terperinci Bagaimana untuk Menggabungkan Berbilang Baris ke Baris Tunggal dalam Oracle Menggunakan LISTAGG?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!