sql - संग्रहीत प्रक्रिया के बिना ओरेकल में एकाधिक पंक्तियों को एक साथ कैसे जोड़ा जा सकता है?




oracle concatenation (3)

संग्रहीत प्रक्रिया के बिना मैं ऑरैकल में निम्नलिखित कैसे प्राप्त कर सकता हूं?

डेटा सेट:

question_id    element_id
1              7
1              8
2              9
3              10
3              11
3              12

वांछित परिणाम:

question_id    element_id
1              7,8
2              9
3              10,11,12



स्ट्रिंग एकत्रीकरण करने के कई तरीके हैं, लेकिन सबसे आसान उपयोगकर्ता परिभाषित फ़ंक्शन है। इस तरह से प्रयास करें जिसके लिए फ़ंक्शन की आवश्यकता नहीं है। एक नोट के रूप में, समारोह के बिना कोई आसान तरीका नहीं है।

कस्टम फ़ंक्शन के बिना यह सबसे छोटा रास्ता है: (यह ROW_NUMBER () और SYS_CONNECT_BY_PATH फ़ंक्शंस का उपयोग करता है)

SELECT questionid,
       LTRIM(MAX(SYS_CONNECT_BY_PATH(elementid,','))
       KEEP (DENSE_RANK LAST ORDER BY curr),',') AS elements
FROM   (SELECT questionid,
               elementid,
               ROW_NUMBER() OVER (PARTITION BY questionid ORDER BY elementid) AS curr,
               ROW_NUMBER() OVER (PARTITION BY questionid ORDER BY elementid) -1 AS prev
        FROM   emp)
GROUP BY questionid
CONNECT BY prev = PRIOR curr AND questionid = PRIOR questionid
START WITH curr = 1;





string-aggregation