SQL Server 2017またはAzureを使用している場合は、MathieuRendaの回答を参照してください。
1対多の関係で2つのテーブルを結合しようとしたときに、同様の問題が発生しました。 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