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