Podstawowa składnia LISTAGG jest:
LISTAGG(col_name_to_be_aggregated, ',') WITHIN GROUP (ORDER BY col)
W twoim przypadku, ponieważ masz podzapytanie jako wynik ustawiony na WM_CONCAT
, możesz umieścić to samo podzapytanie zamiast col_name_to_be_aggregated
w LISTAGG .
Myślę, że możesz również pozbyć się wszystkich ZAMIEN funkcje, ponieważ LITAGG może zaakceptować ogranicznik do wyboru.
Spróbuj,
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)
Chciałbym również wyjaśnić, dlaczego musisz przejść do LITAGG w 12c. Ponieważ t został usunięty z najnowszej wersji 12c. Dlatego każda aplikacja, która opierała się na funkcji WM_CONCAT, nie będzie działać po aktualizacji do 12c. Przeczytaj Dlaczego nie używać WM_CONCAT funkcja w Oracle?
W przypadku wersji przed 11g Release 2 nie można używać LITAGG. Istnieje wiele technik agregacji ciągów, spójrz na moją odpowiedź tutaj .
Więcej informacji na temat Technik agregacji ciągów Oracle