Bagi mereka yang harus menyelesaikan masalah ini menggunakan Oracle 9i (atau lebih awal), Anda mungkin perlu menggunakan SYS_CONNECT_BY_PATH, karena LISTAGG tidak tersedia.
Untuk menjawab OP, kueri berikut akan menampilkan PID dari Tabel A dan menggabungkan semua kolom DESC dari Tabel B:
SELECT pid, SUBSTR (MAX (SYS_CONNECT_BY_PATH (description, ', ')), 3) all_descriptions
FROM (
SELECT ROW_NUMBER () OVER (PARTITION BY pid ORDER BY pid, seq) rnum, pid, description
FROM (
SELECT a.pid, seq, description
FROM table_a a, table_b b
WHERE a.pid = b.pid(+)
)
)
START WITH rnum = 1
CONNECT BY PRIOR rnum = rnum - 1 AND PRIOR pid = pid
GROUP BY pid
ORDER BY pid;
Mungkin juga ada contoh di mana kunci dan nilai semua terkandung dalam satu tabel. Kueri berikut dapat digunakan di mana tidak ada Tabel A, dan hanya Tabel B yang ada:
SELECT pid, SUBSTR (MAX (SYS_CONNECT_BY_PATH (description, ', ')), 3) all_descriptions
FROM (
SELECT ROW_NUMBER () OVER (PARTITION BY pid ORDER BY pid, seq) rnum, pid, description
FROM (
SELECT pid, seq, description
FROM table_b
)
)
START WITH rnum = 1
CONNECT BY PRIOR rnum = rnum - 1 AND PRIOR pid = pid
GROUP BY pid
ORDER BY pid;
Semua nilai dapat disusun ulang sesuai keinginan. Deskripsi yang digabungkan secara individu dapat disusun kembali dalam klausa PARTITION BY, dan daftar PID dapat disusun ulang dalam klausa ORDER BY final.
Bergantian: mungkin ada saat-saat ketika Anda ingin menggabungkan semua nilai dari seluruh tabel menjadi satu baris.
Gagasan utama di sini adalah menggunakan nilai artifisial untuk kelompok deskripsi yang akan digabungkan.
Dalam kueri berikut, string konstan '1' digunakan, tetapi nilai apa pun akan berfungsi:
SELECT SUBSTR (MAX (SYS_CONNECT_BY_PATH (description, ', ')), 3) all_descriptions
FROM (
SELECT ROW_NUMBER () OVER (PARTITION BY unique_id ORDER BY pid, seq) rnum, description
FROM (
SELECT '1' unique_id, b.pid, b.seq, b.description
FROM table_b b
)
)
START WITH rnum = 1
CONNECT BY PRIOR rnum = rnum - 1;
Deskripsi gabungan individu dapat disusun kembali dalam klausa PARTITION BY.
Beberapa jawaban lain di halaman ini juga menyebutkan referensi yang sangat membantu ini:
https://oracle-base.com/articles/misc/string-aggregation-techniques