La sintassi di base di LISTAGG è:
LISTAGG(col_name_to_be_aggregated, ',') WITHIN GROUP (ORDER BY col)
Nel tuo caso, poiché hai una sottoquery come risultato impostato su WM_CONCAT
, potresti inserire la stessa sottoquery al posto di col_name_to_be_aggregated
in LISTAGG .
Penso che tu possa anche sbarazzarti di tutti i REPLACE funzioni, poiché LISTAGG può accettare il delimitatore di tua scelta.
Prova,
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)
Inoltre, vorrei spiegare perché è necessario passare a LISTAGG in 12c. Dal momento che t è stato rimosso dall'ultima versione 12c. Pertanto, qualsiasi applicazione che si è basata sulla funzione WM_CONCAT non funzionerà una volta aggiornata a 12c. Leggi Perché non usare WM_CONCAT funzione in Oracle?
Per la versione 2 precedente a 11g, non puoi usare LISTAGG. Esistono molte tecniche di aggregazione di stringhe, dai un'occhiata alla mia risposta qui .
Maggiori dettagli su Tecniche di aggregazione di stringhe Oracle