Rumah >pangkalan data >Oracle >Bagaimana untuk menukar berbilang baris menjadi satu dalam Oracle

Bagaimana untuk menukar berbilang baris menjadi satu dalam Oracle

WBOY
WBOYasal
2022-03-07 15:12:4622451semak imbas

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)".

Bagaimana untuk menukar berbilang baris menjadi satu dalam Oracle

Persekitaran pengendalian tutorial ini: sistem Windows 10, versi Oracle 11g, komputer Dell G3.

Cara menukar berbilang baris menjadi satu baris dalam Oracle

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!

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