Die grundlegende Syntax von LISTAGG ist:
LISTAGG(col_name_to_be_aggregated, ',') WITHIN GROUP (ORDER BY col)
In Ihrem Fall, da Sie eine Unterabfrage als Ergebnis auf WM_CONCAT
gesetzt haben , könnten Sie die gleiche Unterabfrage anstelle von col_name_to_be_aggregated
setzen im LISTAGG .
Ich denke, Sie können auch alle REPLACE loswerden Funktionen, da LISTAGG das Trennzeichen akzeptieren kann deiner Wahl.
Versuchen Sie es,
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)
Außerdem möchte ich erklären, warum Sie in 12c zu LISTAGG wechseln müssen. Da t aus der neuesten 12c-Version entfernt wurde. Daher funktioniert jede Anwendung, die sich auf die WM_CONCAT-Funktion verlassen hat, nach dem Upgrade auf 12c nicht mehr. Lesen Sie Warum nicht WM_CONCAT verwenden Funktion in Oracle?
Für Version 2 vor Version 11g können Sie LISTAGG nicht verwenden. Es gibt viele String-Aggregationstechniken, schau dir meine Antwort hier an .
Weitere Details zu Oracle String Aggregation Techniques