SQL सर्वर 2017 से शुरू करके, अब आप अपने क्वेरी परिणामों को एक सूची के रूप में प्रदर्शित कर सकते हैं। इसका मतलब है कि आप अपने परिणाम सेट को अल्पविराम से अलग की गई सूची, स्थान से अलग की गई सूची, या जो भी विभाजक आप उपयोग करने के लिए चुनते हैं, के रूप में प्रदर्शित कर सकते हैं।
हालांकि यह सच है कि आप SQL सर्वर 2017 से पहले भी यही प्रभाव प्राप्त कर सकते थे, यह थोड़ा अजीब था।
Transact-SQL में अब STRING_AGG()
है फ़ंक्शन, जो स्ट्रिंग एक्सप्रेशन के मानों को जोड़ता है और उनके बीच विभाजक मान रखता है। यह काफी हद तक MySQL के GROUP_CONCAT()
. के समान ही काम करता है समारोह।
यह लेख ऐसे उदाहरण प्रदान करता है जो T-SQL STRING_AGG()
को प्रदर्शित करते हैं समारोह।
नमूना डेटा
सबसे पहले, यहां कुछ नमूना डेटा है।
कार्य आईडी चुनें, कार्य से कार्यनाम;
परिणाम:
TaskId TaskName ------------------1 बिल्लियों को खिलाएं 2 पानी वाला कुत्ता 3 फ़ीड गार्डन 4 कालीन पेंट 5 साफ छत 6 बिल्लियों को खिलाएं
उदाहरण - कॉमा से अलग की गई सूची
इसलिए हम उपरोक्त डेटा ले सकते हैं, और STRING_AGG()
. का उपयोग कर सकते हैं सभी कार्य नामों को एक बड़ी अल्पविराम से अलग सूची में सूचीबद्ध करने के लिए कार्य करें।
इस तरह:
कार्यों से STRING_AGG(टास्कनाम, ',') चुनें;
परिणाम:
बिल्लियों को खिलाएं, वाटर डॉग, फीड गार्डन, पेंट कालीन, साफ छत, बिल्लियों को खिलाएं
बेशक, इसे अल्पविराम से अलग करने की आवश्यकता नहीं है। इसे NVARCHAR
. की किसी भी अभिव्यक्ति से अलग किया जा सकता है या VARCHAR
प्रकार, और यह एक शाब्दिक या एक चर हो सकता है।
उदाहरण - स्तंभों का संयोजन
हम CONCAT()
. का भी उपयोग कर सकते हैं दो क्षेत्रों को एक साथ जोड़ने के लिए कार्य करता है, उनके अपने विभाजक द्वारा अलग किया जाता है।
उदाहरण:
चुनें STRING_AGG(CONCAT(TaskId, ')', TaskName), '') टास्क से;
परिणाम:
1) बिल्लियों को खिलाएं 2) कुत्ते को पानी पिलाएं 3) बगीचे को खिलाएं 4) कालीन को पेंट करें 5) साफ छत 6) बिल्लियों को खिलाएं
उदाहरण - शून्य मान
यदि आपके परिणाम सेट में शून्य मान हैं, तो उन मानों को अनदेखा कर दिया जाता है और संबंधित विभाजक नहीं जोड़ा जाता है।
यदि यह उपयुक्त नहीं है, तो आप ISNULL()
का उपयोग करके शून्य मानों के लिए एक मान प्रदान कर सकते हैं फ़ंक्शन और उस मान में पास करना जिसे आप उपयोग करना चाहते हैं जब भी एक शून्य मान का सामना करना पड़ता है। ऐसा करने से यह सुनिश्चित होता है कि किसी पंक्ति में शून्य मान होने पर भी आपको एक परिणाम मिलता है।
उदाहरण के लिए, निम्न क्वेरी और परिणाम सेट पर विचार करें:
कार्यों से टास्ककोड चुनें;
परिणाम:
टास्ककोड-------कैट123 नल pnt456 rof789 null
हम देख सकते हैं कि परिणाम सेट में तीन शून्य मान हैं।
अगर हम इसे STRING_AGG()
. के माध्यम से चलाते हैं फ़ंक्शन, हमें यह मिलता है:
कार्यों से STRING_AGG(टास्ककोड, ',') चुनें;
परिणाम:
cat123, pnt456, rof789
हालांकि, अगर हम ISNULL()
. का उपयोग करते हैं किसी भी शून्य मान के लिए प्लेसहोल्डर प्रदान करने के लिए फ़ंक्शन, हमें यह मिलता है:
चुनें STRING_AGG(ISNULL(TaskCode, 'N/A'), ',') टास्क से;
परिणाम:
cat123, N/A, N/A, pnt456, rof789, N/A
उदाहरण - समूहीकृत परिणाम
आप STRING_AGG()
. का भी उपयोग कर सकते हैं अपने परिणाम सेट को समूहीकृत करते समय कार्य करें। उदाहरण के लिए, हो सकता है कि आप कलाकार द्वारा समूहीकृत एल्बमों की सूची चाहते हों।
इसे प्रदर्शित करने के लिए, दो तालिकाओं वाले डेटाबेस की कल्पना करें; Artists
और Albums
. इन तालिकाओं के बीच एक से अनेक संबंध हैं। प्रत्येक कलाकार के लिए कई एल्बम हो सकते हैं।
तो दोनों तालिकाओं को जोड़ने वाली एक नियमित क्वेरी कुछ इस तरह दिख सकती है:
संगीत का उपयोग करें; ar.ArtistName, al.AlbumNameFROM कलाकारों से जुड़ें ar.ArtistId =al.ArtistId;
परिणाम:
कलाकार का नाम एल्बम का नाम -------------------------------------------- ---- आयरन मेडेन पॉवरस्लेव एसी/डीसी पॉवरेज जिम रीव्स सिंगिंग डाउन द लेन डेविन टाउनसेंड ज़िल्टॉइड सर्वज्ञ डेविन टाउनसेंड हताहतों की संख्या कूल डेविन टाउनसेंड एपिक्लाउड आयरन मेडेन कहीं समय में आयरन मेडेन पीस ऑफ़ माइंड आयरन मेडेन किलर आयरन मेडेन मरने के लिए कोई प्रार्थना नहीं स्क्रिप्ट नो साउंड विदाउट साइलेंसबडी रिच बिग स्विंग फेस माइकल ब्लू नाइट रॉक करना सीखता है माइकल रॉक टू इटरनिटी सीखता है माइकल रॉक स्कैंडिनेविया टॉम जोन्स लॉन्ग लॉस्ट सूटकेस टॉम जोन्स स्तुति और टॉम जोन्स को दोष देता है साथ आया जोंस एलन होल्ड्सवर्थ सारी रात गलत एलन होल्ड्सवर्थ द सिक्सटीन मेन ऑफ़ टैन
जैसा कि आप देख सकते हैं, यदि किसी कलाकार के पास एक से अधिक एल्बम हैं, तो कलाकार का नाम कई बार सूचीबद्ध होता है - प्रत्येक एल्बम के लिए एक बार।
लेकिन हम उपयोग कर सकते हैं STRING_AGG()
इसे बदलने के लिए ताकि हम प्रत्येक कलाकार को केवल एक बार सूचीबद्ध करें, उसके बाद उनके द्वारा जारी किए गए एल्बमों की अल्पविराम से अलग सूची:
संगीत का उपयोग करें; ar.ArtistName, STRING_AGG(al.AlbumName, ',')आर्टिस्टों से चुनें ar.ArtistId =al.ArtistIdGROUP BY ArtistName;
परिणाम:
कलाकार का नाम -------------------------------------------------- -------------------------------------------------- ------- एसी/डीसी पॉवरेज एलन होल्ड्सवर्थ ऑल नाइट रॉन्ग, द सिक्सटी मेन ऑफ़ टैन बडी रिच बिग स्विंग फेस डेविन टाउनसेंड ज़िल्टॉइड द ओम्निसिएंट, कैजुअल्टीज़ ऑफ़ कूल, एपिक्लाउड आयरन मेडेन पॉवरस्लेव, कहीं समय में, मन का टुकड़ा, किलर, नो प्रेयर फॉर द डाइंगजिम रीव्स सिंगिंग डाउन द लेन माइकल लर्न टू रॉक ब्लू नाइट, इटर्निटी, स्कैंडिनेविया द स्क्रिप्ट नो साउंड विदाउट साइलेन्क और टॉम जोन्स लॉन्ग लॉस्ट सूटकेस, स्तुति और दोष, अलॉन्ग कम जोन्स
उदाहरण - परिणामों को क्रमित करना
आप संयोजित समूह के भीतर परिणामों को ऑर्डर करने के लिए ऑर्डर क्लॉज का उपयोग कर सकते हैं। यह WITHIN GROUP
. के साथ किया जाता है खंड। इस क्लॉज का उपयोग करते समय, आप ऑर्डर को ORDER BY
. के साथ निर्दिष्ट करते हैं उसके बाद ASC
(आरोही के लिए) या DESC
(अवरोही के लिए)।
उदाहरण:
संगीत का उपयोग करें; समूह के भीतर ar.ArtistName, STRING_AGG(al.AlbumName, ',') का चयन करें (AlbumName DESC द्वारा ऑर्डर करें) कलाकारों से ar.ArtistId =al.ArtistIdGROUP द्वारा ar.ArtistId =al.ArtistIdGROUP से जुड़ें;>परिणाम:
कलाकार का नाम -------------------------------------------------- -------------------------------------------------- ------- एसी/डीसी पॉवरेज एलन होल्ड्सवर्थ द सिक्सटीन मेन ऑफ़ टैन, ऑल नाइट रॉन्ग बडी रिच बिग स्विंग फेस डेविन टाउनसेंड ज़िल्टॉइड द ओम्निसिएंट, एपिक्लाउड, कैजुअल्टीज़ ऑफ़ कूल आयरन मेडेन कहीं इन टाइम, पॉवरस्लेव, पीस ऑफ़ माइंड, मरने वाले के लिए कोई प्रार्थना नहीं, किलरजिम रीव्स सिंगिंग डाउन द लेन माइकल लर्न्स टू रॉक स्कैंडिनेविया, इटर्निटी, ब्लू नाइट द स्क्रिप्ट नो साउंड विदाउट साइलेंस और टॉम जोन्स स्तुति और दोष, लॉन्ग लॉस्ट सूटकेस, अलॉन्ग कम जोन्स