sql >> Databasteknik >  >> RDS >> Oracle

Konvertera WM_CONCAT till Listagg

Den grundläggande syntaxen för LISTAGG är:

LISTAGG(col_name_to_be_aggregated, ',') WITHIN GROUP (ORDER BY col)

I ditt fall, eftersom du har en underfråga som resultat inställd på WM_CONCAT , kan du sätta samma underfråga i stället för col_name_to_be_aggregated i LISTAGG .

Jag tror att du också kan bli av med alla BYT funktioner, eftersom LISTAGG kan acceptera avgränsaren valfri.

Försök,

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)

Jag skulle också vilja förklara varför du behöver flytta till LISTAGG i 12c. Eftersom t har tagits bort från den senaste 12c-versionen. Därför kommer alla program som har förlitat sig på WM_CONCAT-funktionen inte att fungera när de har uppgraderats till 12c. Läs Varför inte använda WM_CONCAT funktion i Oracle?

För pre-11g Release 2 kan du inte använda LISTAGG. Det finns många tekniker för strängaggregation, ta en titt på mitt svar här .

Mer information om Oracle String Aggregation Techniques



  1. SQL för att lägga till kolumn och kommentar i tabellen i ett enda kommando

  2. MySQL String Last Index Of

  3. Fel vid installation av mysql2 gem (Windows 8)

  4. Hur man uppdaterar och beställer med hjälp av ms sql