Zie het antwoord van Mathieu Renda als u SQL Server 2017 of Azure gebruikt.
Ik had een soortgelijk probleem toen ik probeerde twee tabellen samen te voegen met een-op-veel-relaties. In SQL 2005 vond ik dat XML PATH
methode kan de aaneenschakeling van de rijen heel gemakkelijk aan.
Als er een tabel is met de naam STUDENTS
SubjectID StudentName
---------- -------------
1 Mary
1 John
1 Sam
2 Alaina
2 Edward
Resultaat dat ik verwachtte was:
SubjectID StudentName
---------- -------------
1 Mary, John, Sam
2 Alaina, Edward
Ik gebruikte de volgende 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]
Je kunt hetzelfde op een compactere manier doen als je de komma's aan het begin kunt samenvoegen en substring
kunt gebruiken om de eerste over te slaan zodat u geen subquery hoeft te doen:
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