SQL Server で複数の行のテキストを 1 つのテキスト文字列に連結する方法 質問する

SQL Server で複数の行のテキストを 1 つのテキスト文字列に連結する方法 質問する

名前を保持する 3 つの行を持つデータベース テーブルを考えてみましょう。

Peter
Paul
Mary

これを単一の文字列に変換する簡単な方法はありますかPeter, Paul, Mary?

ベストアンサー1

SQL Server 2017またはAzureを使用している場合は、マチュー・レンダの回答

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 (''), TYPE
            ).value('text()[1]','nvarchar(max)') [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 (''), TYPE
        ).value('text()[1]','nvarchar(max)'), 2, 1000) [Students]
FROM dbo.Students ST2

おすすめ記事