Rumah >pangkalan data >Oracle >Bagaimana untuk menukar berbilang baris menjadi satu dalam Oracle
Dalam Oracle, anda boleh menggunakan fungsi listagg dengan klausa "tertib mengikut" untuk menukar berbilang baris menjadi satu baris Pernyataan ini boleh mengisih data dan kemudian menggabungkan hasil yang diisih bersama-sama Sintaks ialah "listagg (. nama lajur) ,'pemisah') dalam kumpulan(susun mengikut nama lajur)".
Persekitaran pengendalian tutorial ini: sistem Windows 10, versi Oracle 11g, komputer Dell G3.
Disebabkan keperluan, adalah perlu untuk menggabungkan sub-organisasi yang diperolehi di bawah organisasi ke dalam satu baris fungsi Oracle sendiri digunakan
listagg (nama lajur, 'pemisah') dalam kumpulan (susun mengikut nama lajur)
Iaitu, dalam setiap kumpulan, LISTAGG mengisih lajur mengikut susunan mengikut klausa, dan isihan Keputusan akhir disambung bersama
Struktur organisasi saya ialah struktur pokok, dan SQL berikut menanyakan nama semua sub-jabatan di bawah jabatan semasa.
SELECT LISTAGG(O.ORGNAME,',') WITHIN GROUP(ORDER BY LEVEL) FROM ORGANIZATION O START WITH O.ORGID = 1000 CONNECT BY PRIOR O.ORGID = O.PID AND LEVEL<4
Nota: SQL di atas menggunakan kata kunci Oracle LEVEL, yang menunjukkan tahap mana data dalam struktur pepohon berada pada
SQL di atas juga menggunakan pernyataan pertanyaan pepohon Oracle MULAI DENGAN … CONNECT BY PRIOR …
Jika pertanyaan adalah untuk semua nod induk nod, START WITH SQL di atas hendaklah ditukar kepada:START WITH O.ORGID = 1000 CONNECT BY PRIOR O.PID = O.ORGID
(Medan selepas PRIOR berada dalam susunan yang berbeza daripada yang sebelumnya )
Data jadual ORGANISASI adalah seperti berikut
ORGID | ORGNAME | PID |
---|---|---|
1000 | 小学 | 0 |
1100 | 一年级 | 1000 |
1200 | 二年级 | 1000 |
1101 | 101班 | 1100 |
1102 | 102班 | 1100 |
1103 | 103班 | 1100 |
1201 | 201班 | 1200 |
1.TINGKAT
SELECT ORGNAME,LEVEL FROM ORGANIZATION START WITH ORGID = 1000 CONNECT BY PRIOR O.ORGID = O.PID
Keputusan pelaksanaan adalah seperti berikut
ORGNAME | LEVEL |
---|---|
小学 | 1 |
一年级 | 2 |
二年级 | 2 |
101班 | 3 |
102班 | 3 |
103班 | 3 |
201班 | 3 |
2.LISTAGG…DI DALAM KUMPULAN …
SELECT LISTAGG(O.ORGNAME,',') WITHIN GROUP(ORDER BY LEVEL) FROM ORGANIZATION O
Keputusan pelaksanaan adalah seperti berikut:
Sekolah rendah, darjah satu, darjah dua, Kelas 101, Kelas 102, Kelas 103, Kelas 201
3. Tukar semua item di bawah nod induk Nod anak dihimpunkan menjadi satu baris
SELECT LISTAGG(O.ORGNAME,',') WITHIN GROUP(ORDER BY LEVEL) FROM ORGANIZATION O START WITH O.ORGID = 1000 CONNECT BY PRIOR O.ORGID = O.PID AND LEVEL<4
Hasil pelaksanaan adalah seperti berikut:
Sekolah rendah, darjah satu, darjah dua, Kelas 101, Kelas 102, Kelas 103, Kelas 201
Tutorial yang disyorkan: " Tutorial Video Oracle》
Atas ialah kandungan terperinci Bagaimana untuk menukar berbilang baris menjadi satu dalam Oracle. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!