Oracle
 sql >> база данни >  >> RDS >> Oracle

Преобразувайте WM_CONCAT в Listagg

Основният синтаксис на LISTAGG е:

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

Във вашия случай, тъй като имате подзаявка като резултат, зададена на WM_CONCAT , можете да поставите същата подзаявка на мястото на col_name_to_be_aggregated в LISTAGG .

Мисля, че можете също да се отървете от всички ЗАМЕНИ функции, тъй като LISTAGG може да приеме разделителя по твой избор.

Опитайте,

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)

Освен това бих искал да обясня защо трябва да преминете към LISTAGG в 12c. Тъй като t е премахнат от най-новата версия 12c. Следователно всяко приложение, което е разчитало на функцията WM_CONCAT, няма да работи, след като бъде надстроено до 12c. Прочетете Защо не използвате WM_CONCAT функция в Oracle?

За версия 2 преди 11g не можете да използвате LISTAGG. Има много техники за агрегиране на низове, вижте моя отговор тук .

Повече подробности за техники за агрегиране на низове на 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. Разделете таблицата на колони на различни нива

  2. Javascript Сортиране на масив като подреждане по в Oracle

  3. 7 неща, които трябва да знаете за отделенията в Oracle Cloud Infrastructure

  4. 2 начина за връщане на редове, които не съдържат числови стойности в Oracle

  5. Рамка за синхронизиране:Oracle/SQLServer