यदि आप SQL Server 2017 या Azure पर हैं, तो Mathieu Renda उत्तर देखें।
जब मैं एक-से-कई संबंधों के साथ दो तालिकाओं में शामिल होने का प्रयास कर रहा था तो मुझे एक समान समस्या थी। SQL 2005 में मैंने पाया कि XML PATH
विधि पंक्तियों के संयोजन को बहुत आसानी से संभाल सकती है।
अगर STUDENTS
. नाम की कोई टेबल है
SubjectID StudentName
---------- -------------
1 Mary
1 John
1 Sam
2 Alaina
2 Edward
परिणाम मुझे अपेक्षित था:
SubjectID StudentName
---------- -------------
1 Mary, John, Sam
2 Alaina, Edward
मैंने निम्नलिखित T-SQL
का उपयोग किया है :
SELECT Main.SubjectID,
LEFT(Main.Students,Len(Main.Students)-1) As "Students"
FROM
(
SELECT DISTINCT ST2.SubjectID,
(
SELECT ST1.StudentName + ',' AS [text()]
FROM dbo.Students ST1
WHERE ST1.SubjectID = ST2.SubjectID
ORDER BY ST1.SubjectID
FOR XML PATH ('')
) [Students]
FROM dbo.Students ST2
) [Main]
यदि आप शुरुआत में अल्पविरामों को संक्षिप्त कर सकते हैं और substring
का उपयोग कर सकते हैं, तो आप वही काम अधिक कॉम्पैक्ट तरीके से कर सकते हैं पहले वाले को छोड़ने के लिए ताकि आपको उप-क्वेरी करने की आवश्यकता न पड़े:
SELECT DISTINCT ST2.SubjectID,
SUBSTRING(
(
SELECT ','+ST1.StudentName AS [text()]
FROM dbo.Students ST1
WHERE ST1.SubjectID = ST2.SubjectID
ORDER BY ST1.SubjectID
FOR XML PATH ('')
), 2, 1000) [Students]
FROM dbo.Students ST2