sql >> Database teknologi >  >> RDS >> Oracle

Konverter WM_CONCAT til Listagg

Den grundlæggende syntaks for LISTAGG er:

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

I dit tilfælde, da du har en underforespørgsel som resultat sat til WM_CONCAT , kan du sætte den samme underforespørgsel i stedet for col_name_to_be_aggregated i LISTAGG .

Jeg tror også, du kan slippe af med alle de ERSTAT funktioner, da LISTAGG kan acceptere afgrænsningstegnet efter eget valg.

Prøv,

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)

Jeg vil også gerne forklare, hvorfor du skal flytte til LISTAGG i 12c. Da t er blevet fjernet fra den seneste 12c-version. Derfor vil enhver applikation, der har været afhængig af WM_CONCAT-funktionen, ikke fungere, når den er opgraderet til 12c. Læs Hvorfor ikke bruge WM_CONCAT funktion i Oracle?

For pre-11g Release 2 kan du ikke bruge LISTAGG. Der er mange strengaggregeringsteknikker, se mit svar her .

Flere detaljer om Oracle String Aggregation Techniques



  1. I stedet for trigger i SQL Server mister SCOPE_IDENTITY?

  2. Kan jeg returnere værdier til PHP fra en anonym PL/SQL-blok?

  3. MySQL Hash-indekser til optimering

  4. Hvordan tager man backup af en enkelt tabel i en MySQL-database?