Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Konversikan WM_CONCAT ke Listagg

Sintaks dasar LISTAGG adalah:

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

Dalam kasus Anda, karena Anda memiliki sub-kueri sebagai hasil yang disetel ke WM_CONCAT , Anda dapat menempatkan sub-kueri yang sama sebagai pengganti col_name_to_be_aggregated di LISTAGG .

Saya pikir Anda juga dapat menyingkirkan semua GANTI fungsi, karena, LISTAGG dapat menerima pembatas pilihan Anda.

Coba,

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)

Juga, saya ingin menjelaskan mengapa Anda perlu pindah ke LISTAGG di 12c. Sejak t telah dihapus dari versi 12c terbaru. Oleh karena itu, aplikasi apa pun yang telah mengandalkan fungsi WM_CONCAT tidak akan berfungsi setelah ditingkatkan ke 12c. Baca Mengapa tidak menggunakan WM_CONCAT fungsi di Oracle?

Untuk pra-11g Rilis 2, Anda tidak dapat menggunakan LISTAGG. Ada banyak teknik agregasi string, lihat jawaban saya di sini .

Detail selengkapnya tentang Teknik Agregasi String 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. Oracle PL/SQL Membuat tabel di kursor?

  2. buat tabel dengan sequence.nextval di oracle

  3. Cara menghitung jumlah multi kolom di Oracle

  4. Apa arti kesalahan Oracle berikut:indeks kolom tidak valid?

  5. Nilai Urutan Oracle tidak dipesan