sql हरण एसक्यूएल-ग्रुप द्वारा उपयोग करते समय एकाधिक मूल्य अल्पविराम अलग होते हैं




समाप्ति सूचक चिन्ह (4)

मेरे पास डेटा है जो दिखता है I

CUSTOMER,  CUSTOMER_ID, PRODUCT
ABC INC    1            XYX
ABC INC    1            ZZZ
DEF CO     2            XYX
DEF CO     2            ZZZ
DEF CO     2            WWW
GHI LLC    3            ZYX

मैं एक प्रश्न लिखना चाहूंगा जो डेटा को इस तरह दिखता है:

CUSTOMER, CUSTOMER_ID, PRODUCTS
ABC INC   1            XYX, ZZZ
DEF CO    2            XYX, ZZZ, WWW
GHI LLC   3            ZYX

अगर मदद करता है तो ओरेकल 10 जी का उपयोग करना मैंने कुछ देखा जो MYSQL का उपयोग कर काम करेगा, लेकिन मुझे एक सादे एसक्यूएल या ओरेकल समकक्ष की आवश्यकता है। मैंने संग्रहीत procs के उदाहरण भी देखे हैं जिन्हें बनाया जा सकता है, हालांकि, मैं उपयोग किए जा रहे उत्पाद के साथ एक संग्रहीत proc का उपयोग नहीं कर सकता

यहां बताया गया है कि अगर मैं इसे प्रयोग कर रहा था तो यह MySQL में कैसे काम करेगा

SELECT CUSTOMER, 
       CUSTOMER_ID, 
       GROUP_CONCAT( PRODUCT ) 
FROM MAGIC_TABLE 
GROUP BY CUSTOMER, CUSTOMER_ID

धन्यवाद।


धन्यवाद निगेल,

मेरे एसक्यूएल के रूप में उतना ही सुरुचिपूर्ण नहीं है जितना कि हो सकता है, लेकिन मुझे ऐसे समाधान की ज़रूरत है जो एसक्यूएल की आवश्यकता होती है, न कि पीएलएसक्यूएल या टीएसक्यूएल, इसलिए यह इस तरह दिख रही है:

SELECT   CUSTOMER, CUSTOMER_ID, COUNT(PRODUCT) PROD_COUNT, 
         RTRIM( 
            XMLAGG( XMLELEMENT (C, PRODUCT || ',') ORDER BY PRODUCT
).EXTRACT ('//text()'), ',' 
         ) AS PRODUCTS FROM     (
         SELECT   DISTINCT CUSTOMER, CUSTOMER_ID, PRODUCT
         FROM     MAGIC_TABLE
         ) GROUP BY CUSTOMER, CUSTOMER_ID ORDER BY 1 , 2

अभी भी निश्चित नहीं है कि एक्सएमएल फ़ंक्शंस ठीक क्या है, लेकिन जब जरूरत पड़ती है तो मैं खुदाई करूंगा।


ओरेकल यूजर फ़ंक्शन 'wm_concat' LISTAGG के समान ही काम करता है, सिवाय आप एक डिलीमीटर को निर्दिष्ट नहीं कर सकते, 'डिफ़ॉल्ट रूप से या सॉर्ट ऑर्डर के अनुसार हालांकि यह 10 जी के साथ संगत है


मुझे लगता है कि LISTAGG इस स्थिति में उपयोग करने के लिए फ़ंक्शन द्वारा सर्वश्रेष्ठ समुच्चय समूह है:

  SELECT CUSTOMER, CUSTOMER_ID,
         LISTAGG(PRODUCT, ', ') WITHIN GROUP (ORDER BY PRODUCT)
    FROM SOME_TABLE
GROUP BY CUSTOMER, CUSTOMER_ID
ORDER BY 1, 2

यह लिंक ओरेकल पर ऐसा करने के विभिन्न तरीकों के कई उदाहरणों को दर्शाता है देखें कि वहां क्या कुछ है जो आपके डेटाबेस में करने की अनुमति है







oracle10g