Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Konvertieren Sie WM_CONCAT in Listagg

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