Wenn Sie SQL Server 2017 oder Azure verwenden, lesen Sie die Antwort von Mathieu Renda.
Ich hatte ein ähnliches Problem, als ich versuchte, zwei Tische mit 1:n-Beziehungen zu verbinden. In SQL 2005 fand ich diesen XML PATH
-Methode kann die Verkettung der Zeilen sehr einfach handhaben.
Wenn es eine Tabelle mit dem Namen STUDENTS
gibt
SubjectID StudentName
---------- -------------
1 Mary
1 John
1 Sam
2 Alaina
2 Edward
Das erwartete Ergebnis war:
SubjectID StudentName
---------- -------------
1 Mary, John, Sam
2 Alaina, Edward
Ich habe das folgende T-SQL
verwendet :
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]
Sie können dasselbe auf kompaktere Weise tun, wenn Sie die Kommas am Anfang verketten und substring
verwenden um die erste zu überspringen, damit Sie keine Unterabfrage machen müssen:
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