Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Chuyển đổi WM_CONCAT sang Listagg

Cú pháp cơ bản của LISTAGG là:

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

Trong trường hợp của bạn, vì bạn có một truy vấn phụ nên kết quả được đặt thành WM_CONCAT , bạn có thể đặt cùng một truy vấn phụ thay cho col_name_to_be_aggregated trong LISTAGG .

Tôi nghĩ bạn cũng có thể loại bỏ tất cả REPLACE các hàm, vì LISTAGG có thể chấp nhận dấu phân cách của sự lựa chọn của bạn.

Hãy thử,

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)

Ngoài ra, tôi muốn giải thích lý do tại sao bạn cần chuyển sang LISTAGG trong 12c. Kể từ khi t đã bị xóa khỏi phiên bản 12c mới nhất. Do đó, bất kỳ ứng dụng nào đã dựa vào chức năng WM_CONCAT sẽ không hoạt động sau khi được nâng cấp lên 12c. Đọc Tại sao không sử dụng WM_CONCAT trong Oracle?

Đối với Bản phát hành 2 trước 11g, bạn không thể sử dụng LISTAGG. Có nhiều kỹ thuật tổng hợp chuỗi, hãy xem câu trả lời của tôi tại đây .

Thông tin chi tiết khác về Kỹ thuật Tổng hợp Chuỗi 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. Đánh dấu cú pháp trong trình duyệt Oracle giống như SQL Server Management Studio

  2. làm thế nào để in Câu lệnh (CallableStatement) trong Java?

  3. Tại sao lỗi ORA-12054 lại xảy ra khi tạo ví dụ dạng xem vật chất hóa đơn giản này?

  4. Toad for Oracle..Làm thế nào để thực thi nhiều câu lệnh?

  5. Cách PLAY_SOUND trong Oracle Forms