दिलचस्प पोस्ट
स्ट्रीम लाइव एंड्रॉइड ऑडियो से सर्वर "शाखा", "टैग" और "ट्रंक" का मतलब उपवर्ती भंडारों में क्या होता है? उदाहरण चर बनाम प्रतीक रेल पर रूबी (form_for) जावास्क्रिप्ट डायनेमिक वैरिएबल नेम डिफ़ॉल्ट रूप से नंबर कीपैड के साथ संपादन करें, लेकिन वर्णमाला वर्णों को अनुमति दें पायथन डिक्शनरी ऑब्जेक्ट से कुंजी-मान युग्म के सबसेट निकालें? सीएसएस के साथ क्लिक करें पर div दिखाएँ / छुपाएं jQuery: एक ईवेंट हैंडलर समारोह में ईवेंट ऑब्जेक्ट को तर्क के रूप में दिए बिना कैसे प्राप्त करें? जावा रेगेक्स धागा सुरक्षित है? मैं PHP में कैसे एक UTF-8 सीएसवी आउटपुट कर सकता हूं जो Excel ठीक से पढ़ा जाएगा? आईओओ -885 9 में utf8-characters को परिवर्तित करें और पीएचपी में वापस जाएं NTFS प्रदर्शन और फ़ाइलों और निर्देशिकाओं की बड़ी मात्रा क्या संकुल अनुक्रमित अद्वितीय होना चाहिए? रैपर "https" खोजने में असमर्थ – क्या आपने PHP को कॉन्फ़िगर करते समय इसे सक्षम करना भूल गए थे? आप एक इवर का उपयोग क्यों करेंगे?

SQL क्वेरी का उपयोग करते हुए मैं एक अल्पविराम-पृथक सूची कैसे बना सकता हूं?

मेरे पास 3 टेबल हैं:

  • अनुप्रयोग (आईडी, नाम)
  • संसाधन (आईडी, नाम)
  • अनुप्रयोग संसाधन (आईडी, एपीआईडी, संसाधन_आईडी)

मैं एक जीयूआई पर सभी संसाधन नामों की एक तालिका दिखाना चाहता हूँ। प्रत्येक पंक्ति में एक सेल में मैं उस संसाधन के सभी अनुप्रयोगों (अल्पविराम से अलग) को सूचीबद्ध करना चाहता हूं।

तो सवाल यह है, एसक्यूएल में ऐसा करने का सबसे अच्छा तरीका क्या है क्योंकि मुझे सभी संसाधनों की आवश्यकता है और मुझे प्रत्येक संसाधन के लिए सभी एप्लिकेशन भी मिलना चाहिए?

क्या मैं पहले संसाधनों से एक चयन * चलाता हूं और फिर प्रत्येक संसाधन के माध्यम से पाश और उस संसाधन के लिए आवेदनों की सूची प्राप्त करने के लिए प्रति संसाधन एक अलग क्वेरी करूँ?

क्या ऐसा कोई तरीका है जो मैं एक प्रश्न में कर सकता हूं?

वेब के समाधान से एकत्रित समाधान "SQL क्वेरी का उपयोग करते हुए मैं एक अल्पविराम-पृथक सूची कैसे बना सकता हूं?"

डीबी-अज्ञेय तरीके से ऐसा करने का कोई रास्ता नहीं है। तो आपको इस तरह पूरे डेटा-सेट प्राप्त करना होगा:

select r.name as ResName, a.name as AppName from Resouces as r, Applications as a, ApplicationsResources as ar where ar.app_id = a.id and ar.resource_id = r.id 

और फिर ऐप्पानैम को प्रोग्रामेटिक रूप से कॉनराइट करते हुए रेज़मेड द्वारा समूहबद्ध करते हुए

माई एसक्यूएल

  SELECT r.name, GROUP_CONCAT(a.name SEPARATOR ',') FROM RESOURCES r JOIN APPLICATIONSRESOURCES ar ON ar.resource_id = r.id JOIN APPLICATIONS a ON a.id = ar.app_id GROUP BY r.name 

SQL सर्वर (2005+)

 SELECT r.name, STUFF((SELECT ','+ a.name FROM APPLICATIONS a JOIN APPLICATIONRESOURCES ar ON ar.app_id = a.id WHERE ar.resource_id = r.id GROUP BY a.name FOR XML PATH(''), TYPE).value('.','VARCHAR(max)'), 1, 1, '') FROM RESOURCES r 

SQL सर्वर (2017+)

  SELECT r.name, STRING_AGG(a.name, ',') FROM RESOURCES r JOIN APPLICATIONSRESOURCES ar ON ar.resource_id = r.id JOIN APPLICATIONS a ON a.id = ar.app_id GROUP BY r.name 

आकाशवाणी

मैं ओरेकल में स्ट्रिंग एकत्रीकरण / समरूपता के बारे में पढ़ने की सलाह देता हूं

SQL सर्वर में कॉमा-सीमांकित स्ट्रिंग बनाने के लिए COALESCE का उपयोग करना
http://www.sqlteam.com/article/using-coalesce-to-build-comma-delimited-string

उदाहरण:

 DECLARE @EmployeeList varchar(100) SELECT @EmployeeList = COALESCE(@EmployeeList + ', ', '') + CAST(Emp_UniqueID AS varchar(5)) FROM SalesCallsEmployees WHERE SalCal_UniqueID = 1 SELECT @EmployeeList 

मुझे नहीं पता है कि डेटाबेस में यह करने के लिए किसी भी तरह का समाधान है, अज्ञेय तरीके से, क्योंकि आपको सबसे अधिक संभावना स्ट्रिंग हेरफेर के कुछ रूप की आवश्यकता होगी, और वे आमतौर पर विक्रेताओं के बीच अलग-अलग होते हैं।

SQL सर्वर 2005 और ऊपर के लिए, आप इसका उपयोग कर सकते हैं:

 SELECT r.ID, r.Name, Resources = STUFF( (SELECT ','+a.Name FROM dbo.Applications a INNER JOIN dbo.ApplicationsResources ar ON ar.app_id = a.id WHERE ar.resource_id = r.id FOR XML PATH('')), 1, 1, '') FROM dbo.Resources r 

यह सबटाइम (किसी दिए गए संसाधन के लिए अनुप्रयोग) को अल्पविराम द्वारा विभाजित सूची के रूप में सूचीबद्ध करने के FOR XML PATH 2005 के FOR XML PATH उपयोग करता है।

न घुलनेवाली तलछट

मेरा मानना ​​है कि आप क्या चाहते हैं:

SELECT ItemName, GROUP_CONCAT(DepartmentId) FROM table_name GROUP BY ItemName

यदि आप MySQL का इस्तेमाल कर रहे हैं

संदर्भ

एसक्यूएल सर्वर मानते हुए:

तालिका संरचना:

 CREATE TABLE [dbo].[item_dept]( [ItemName] char(20) NULL, [DepartmentID] int NULL ) 

प्रश्न:

 SELECT ItemName, STUFF((SELECT ',' + rtrim(convert(char(10),DepartmentID)) FROM item_dept b WHERE a.ItemName = b.ItemName FOR XML PATH('')),1,1,'') DepartmentID FROM item_dept a GROUP BY ItemName 

परिणाम:

 ItemName DepartmentID item1 21,13,9,36 item2 4,9,44 

मुझे लगता है कि हम पुनः प्राप्त करने के लिए निम्नलिखित तरीके से लिख सकते हैं (नीचे कोड सिर्फ एक उदाहरण है, कृपया आवश्यकतानुसार संशोधित करें):

 Create FUNCTION dbo.ufnGetEmployeeMultiple(@DepartmentID int) RETURNS VARCHAR(1000) AS BEGIN DECLARE @Employeelist varchar(1000) SELECT @Employeelist = COALESCE(@Employeelist + ', ', '') + E.LoginID FROM humanresources.Employee E Left JOIN humanresources.EmployeeDepartmentHistory H ON E.BusinessEntityID = H.BusinessEntityID INNER JOIN HumanResources.Department D ON H.DepartmentID = D.DepartmentID Where H.DepartmentID = @DepartmentID Return @Employeelist END SELECT D.name as Department, dbo.ufnGetEmployeeMultiple (D.DepartmentID)as Employees FROM HumanResources.Department D SELECT Distinct (D.name) as Department, dbo.ufnGetEmployeeMultiple (D.DepartmentID) as Employees FROM HumanResources.Department D 

SQL सर्वर के अगले संस्करण से आप ऐसा करने में सक्षम होंगे

 SELECT r.name, STRING_AGG(a.name, ',') FROM RESOURCES r JOIN APPLICATIONSRESOURCES ar ON ar.resource_id = r.id JOIN APPLICATIONS a ON a.id = ar.app_id GROUP BY r.name 

उत्पाद के पिछले संस्करणों के लिए इस समस्या के विभिन्न तरीकों के बहुत व्यापक हैं। उनमें से एक उत्कृष्ट समीक्षा लेख में है: लेन-देन रो वैल्यूज़ इन ट्रांसएक्ट-एसक्यूएल

  • वस्तुओं की संख्या ज्ञात नहीं होने पर मूल्यों को जोड़ना

    • पुनरावर्ती सीटीई विधि
    • ब्लैकबॉक्स एक्सएमएल विधियां
    • सामान्य भाषा रनटाइम का उपयोग करना
    • स्केलर यूडीएफ के साथ रिकर्सन
    • तालिका WHILE लूप के साथ यूडीएफ की कीमत है
    • गतिशील एसक्यूएल
    • कर्सर दृष्टिकोण
  • गैर-विश्वसनीय दृष्टिकोण

    • स्केलर यूडीएफ टी-एसक्यूएल अपडेट एक्सटेंशन के साथ
    • चयन में वैरिएबल कंसनेक्शन के साथ स्केलर यूडीएफ

माई एसक्यूएल

  SELECT r.name, GROUP_CONCAT(a.name SEPARATOR ',') FROM RESOURCES r JOIN APPLICATIONSRESOURCES ar ON ar.resource_id = r.id JOIN APPLICATIONS a ON a.id = ar.app_id GROUP BY r.name 

**


एमएस एसक्यूएल सर्वर

 SELECT r.name, STUFF((SELECT ','+ a.name FROM APPLICATIONS a JOIN APPLICATIONRESOURCES ar ON ar.app_id = a.id WHERE ar.resource_id = r.id GROUP BY a.name FOR XML PATH(''), TYPE).value('.','VARCHAR(max)'), 1, 1, '') FROM RESOURCES r GROUP BY deptno; 

आकाशवाणी

  SELECT r.name, LISTAGG(a.name SEPARATOR ',') WITHIN GROUP (ORDER BY a.name) FROM RESOURCES r JOIN APPLICATIONSRESOURCES ar ON ar.resource_id = r.id JOIN APPLICATIONS a ON a.id = ar.app_id GROUP BY r.name; 

अज्ञेयवादी बनने के लिए, वापस ड्रॉप और पैंट।

 Select a.name as a_name, r.name as r_name from ApplicationsResource ar, Applications a, Resources r where a.id = ar.app_id and r.id = ar.resource_id order by r.name, a.name; 

अब उपयोगकर्ता आपकी सर्वर प्रोग्रामिंग भाषा a_names को जोड़ने के लिए करते हैं जबकि r_name पिछली बार के समान है

यह SQL सर्वर में करेगा:

 DECLARE @listStr VARCHAR(MAX) SELECT @listStr = COALESCE(@listStr+',' ,'') + Convert(nvarchar(8),DepartmentId) FROM Table SELECT @listStr