Sintaks dasar LISTAGG adalah:
LISTAGG(col_name_to_be_aggregated, ',') WITHIN GROUP (ORDER BY col)
Dalam kasus Anda, karena Anda memiliki sub-kueri sebagai hasil yang disetel ke WM_CONCAT
, Anda dapat menempatkan sub-kueri yang sama sebagai pengganti col_name_to_be_aggregated
di LISTAGG .
Saya pikir Anda juga dapat menyingkirkan semua GANTI fungsi, karena, LISTAGG dapat menerima pembatas pilihan Anda.
Coba,
LISTAGG
(
CASE
WHEN ROW_NUMBER() OVER (PARTITION BY product_id,
product_detail_set_id,
registration_id,
product_family_id,
application_id,
package_Set_id,
legal_status
order by packset_country)=1 THEN
legal_status
ELSE
NULL
END), ',') WITHIN GROUP (ORDER BY required_col)
Juga, saya ingin menjelaskan mengapa Anda perlu pindah ke LISTAGG di 12c. Sejak t telah dihapus dari versi 12c terbaru. Oleh karena itu, aplikasi apa pun yang telah mengandalkan fungsi WM_CONCAT tidak akan berfungsi setelah ditingkatkan ke 12c. Baca Mengapa tidak menggunakan WM_CONCAT fungsi di Oracle?
Untuk pra-11g Rilis 2, Anda tidak dapat menggunakan LISTAGG. Ada banyak teknik agregasi string, lihat jawaban saya di sini .
Detail selengkapnya tentang Teknik Agregasi String Oracle