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)
साथ ही, मैं यह बताना चाहूंगा कि आपको 12c में LISTAGG में जाने की आवश्यकता क्यों है। चूंकि t को नवीनतम 12c संस्करण से हटा दिया गया है। इसलिए, कोई भी एप्लिकेशन जो WM_CONCAT फ़ंक्शन पर निर्भर रहा है, एक बार 12c में अपग्रेड होने के बाद काम नहीं करेगा। पढ़ें WM_CONCAT का उपयोग क्यों नहीं करें Oracle में काम करता है?
11g से पहले रिलीज़ 2 के लिए, आप LISTAGG का उपयोग नहीं कर सकते। कई स्ट्रिंग एकत्रीकरण तकनीकें हैं, मेरे उत्तर पर एक नज़र डालें यहां .
Oracle String Aggregation Techniques के बारे में अधिक जानकारी