Dalam Oracle, menggabungkan berbilang baris dengan cekap ke dalam satu baris selalunya merupakan operasi yang diingini. Soalan ini menyelidiki senario tertentu di mana jadual mengandungi data dalam format berikut:
question_id | element_id |
---|---|
1 | 7 |
1 | 8 |
2 | 9 |
3 | 10 |
3 | 11 |
3 | 12 |
Objektifnya adalah untuk mengubah data ini kepada hasil yang diingini berikut:
question_id | element_id |
---|---|
1 | 7,8 |
2 | 9 |
3 | 10,11,12 |
Untuk mencapai tugas ini dengan berkesan tanpa menggunakan prosedur tersimpan, Oracle 11gR2 memperkenalkan klausa LISTAGG. Klausa yang luar biasa ini membenarkan operasi penggabungan sedemikian dilakukan secara terus dalam satu pernyataan SQL.
Begini cara untuk melaksanakannya dalam pertanyaan Oracle anda:
SELECT question_id, LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id) FROM YOUR_TABLE GROUP BY question_id;
Klausa LISTAGG mengambil bentuk berikut :
LISTAGG(expression, delimiter) WITHIN GROUP (ORDER BY expression)
Dalam kes ini, kami menentukan lajur "id_elemen" sebagai ungkapan dan "," sebagai pembatas untuk memisahkan nilai yang digabungkan. Klausa WITHIN GROUP memastikan bahawa penggabungan dilakukan dalam setiap kumpulan, yang ditakrifkan oleh lajur "id_soalan".
Perlu diperhatikan bahawa rentetan gabungan yang terhasil mungkin melebihi had panjang maksimum untuk jenis data VARCHAR2 ( 4000 aksara). Untuk menangani isu yang berpotensi ini, Oracle 12cR2 memperkenalkan pilihan ON OVERFLOW TRUNCATE/ERROR. Dengan memasukkan pilihan ini, anda boleh menentukan sama ada untuk memotong rentetan atau menimbulkan ralat jika melebihi had panjang.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggabungkan Berbilang Baris dengan Cekap menjadi Baris Tunggal dalam Oracle SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!