Základní syntaxe LISTAGG je:
LISTAGG(col_name_to_be_aggregated, ',') WITHIN GROUP (ORDER BY col)
Ve vašem případě, protože máte jako výsledek dílčí dotaz nastaven na WM_CONCAT
, můžete umístit stejný poddotaz místo col_name_to_be_aggregated
v LISTAGG .
Myslím, že se také můžete zbavit všech NAHRADIT funkce, protože LISTAGG může přijmout oddělovač tvé volby.
Zkuste,
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)
Také bych rád vysvětlil, proč musíte přejít na LISTAGG v 12c. Protože t bylo odstraněno z nejnovější verze 12c. Proto žádná aplikace, která se spoléhala na funkci WM_CONCAT, nebude po upgradu na 12c fungovat. Přečtěte si Proč nepoužít WM_CONCAT funkce v Oracle?
U verze před 11g verze 2 nelze použít LISTAGG. Existuje mnoho technik agregace řetězců, podívejte se na mou odpověď zde .
Další podrobnosti o technikách agregace řetězců Oracle