Hvis du er på SQL Server 2017 eller Azure, se svar fra Mathieu Renda.
Jeg havde et lignende problem, da jeg prøvede at forbinde to borde med en-til-mange-forhold. I SQL 2005 fandt jeg den XML PATH
metode kan håndtere sammenkædningen af rækkerne meget let.
Hvis der er en tabel kaldet STUDENTS
SubjectID StudentName
---------- -------------
1 Mary
1 John
1 Sam
2 Alaina
2 Edward
Resultatet, jeg forventede, var:
SubjectID StudentName
---------- -------------
1 Mary, John, Sam
2 Alaina, Edward
Jeg brugte følgende 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]
Du kan gøre det samme på en mere kompakt måde, hvis du kan sammensætte kommaerne i begyndelsen og bruge substring
for at springe den første over, så du ikke behøver at lave en underforespørgsel:
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