Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Konwertuj WM_CONCAT na Listagg

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak utworzyć i wykonać dynamiczne zapytanie w procedurze składowanej Oracle?

  2. Jak zresetować sekwencję w Oracle?

  3. Jak przesłać plik zrzutu Oracle do bazy danych Oracle:AWS RDS

  4. 2 sposoby łączenia ciągu i liczby w Oracle

  5. Błąd ORA-01745 podczas wykonywania zapytań parametrycznych w c#