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