Oracle sql listagg berdasarkan kolom lain

Saya baru mengenal Oracle SQL dan saya harus menangani tugas seperti di bawah ini..

Saya telah melampirkan gambar di sini dan yang perlu saya lakukan saat ini adalah menggunakan SQL untuk menampilkan hasil seperti sisi kanan dari sisi kiri..

Saya perlu membuat daftar Kolom 2 (C2) dan Kolom 3 (C3), berdasarkan Kolom 1 (C1)
Jika C2 dan C3 hanya mendapat satu record dan tidak ada record yang terduplikasi,
maka hasilnya terlihat seperti baris pertama: 4316, Pengirim oranye 1, Hong Kong, Cina.
Namun ada beberapa kasus rumit seperti 4343/4403/4406 di C1.

C2 mungkin memiliki catatan duplikat tetapi C3 tidak miliki, sebaliknya.

Saya coba pakai rank_over, lalu hasilnya menjadi sebelah kiri pada gambar terlampir.

SELECT t1.number AS C1,
       t2.shipper AS C2,
       rank() over (partition BY t2.shipper
                    ORDER BY t1.number) AS rank_over_c2,
       t2.venue AS C3,
       rank() over (partition BY t2.venue
                    ORDER BY t1.number) AS rank_over_c3
FROM table1 t1,
     table2 t2

Tapi setelah itu saya tidak tahu bagaimana saya bisa mendapatkan hasil seperti sisi kanan pada gambar terlampir..

Gambar ada di sini:
Sisi kiri adalah kolom dan data asli, saya ingin mendapatkan hasil seperti sisi kanan


person appletabo    schedule 20.03.2016    source sumber
comment
Pertanyaan Anda sepertinya tidak terstruktur. Silakan merujuk ke stackoverflow.com/help/how-to-ask tentang cara mengajukan pertanyaan yang dapat dijawab dengan mudah .   -  person F43nd1r    schedule 20.03.2016


Jawaban (1)


Mencoba:

SELECT * FROM 
(
   SELECT c1, listagg( c2, ', ' ) within group ( order by c2 ) as C2
   FROM ( select distinct c1, c2 from c1c2 )
   Group by c1
) x 
JOIN (
   SELECT c1, listagg( c3, ', ' ) within group ( order by c3 ) as C3
   FROM ( select distinct c1, c3 from c1c2 )
   Group by c1
) y
using( c1 )
person krokodilko    schedule 20.03.2016