Oracle 11g memiliki fungsi LISTAGG yang rapi yang cukup sesuai dengan yang Anda inginkan, namun karena Anda menggunakan 10g, ini tidak tersedia untuk Anda (kecuali jika Anda memutuskan untuk memutakhirkan).
Jika karena alasan tertentu Anda tidak ingin (atau tidak dapat karena alasan apa pun) meningkatkan ke 11g, saya sarankan untuk melihat beberapa alternatif LISTAGG yang tersedia untuk Anda di 10g.
Anda dapat melihat beberapa alternatif yang diusulkan di sini
Menyesuaikan dengan cepat adaptasi cepat dari salah satu alternatif yang diusulkan agar sesuai dengan skenario kasus Anda:
WITH Q AS
(
SELECT 'North' POD, 'Rony' NAME FROM DUAL UNION ALL
SELECT 'North', 'James' FROM DUAL UNION ALL
SELECT 'North', 'Aby' FROM DUAL UNION ALL
SELECT 'South', 'Sam' FROM DUAL UNION ALL
SELECT 'South', 'Willy' FROM DUAL UNION ALL
SELECT 'West', 'Mike' FROM DUAL
)
SELECT POD,
RTRIM(
XMLAGG (XMLELEMENT(e, name||',') ORDER BY name).EXTRACT('//text()'),
','
) AS name
FROM q
GROUP BY POD;
Tapi ingat bahwa ini bukan solusi yang sebenarnya karena Anda harus menyesuaikannya dengan tabel Anda (bukan tabel DUAL dummy) dll...
Solusi Anda mungkin akan terlihat seperti:
SELECT POD,
RTRIM(
XMLAGG (XMLELEMENT(E, NAME||',') ORDER BY NAME).EXTRACT('//text()'),
','
) AS NAME
FROM tbl1
GROUP BY POD;
Jika Anda ingin mengubah pembatas, Anda dapat mengubahnya dari koma di bagian ini:
(E, NAME||',')
RTRIM ada di sana hanya untuk memotong tanda koma dari akhir string yang digabungkan, jika Anda tidak terganggu dengan tanda koma, Anda dapat menghilangkan fungsi RTRIM untuk menghemat keterbacaan.