SQL Server 多行文本连接:XML PATH 方法
将多行文本数据合并成单个字符串的需求很常见。例如,有一个包含名称的表:
<code>Peter Paul Mary</code>
目标是将其转换为一个统一的字符串:“Peter, Paul, Mary”。
对于 SQL Server 2017 或 Azure 用户,可以考虑 Mathieu Renda 提供的解决方案。但是,对于早期版本(如 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 代码:
<code class="language-sql">SELECT Main.SubjectID, LEFT(Main.Students,Len(Main.Students)-1) As "Students" FROM ( SELECT 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 GROUP BY ST2.SubjectID ) [Main]</code>
此查询检索 SubjectID 和连接的 StudentName 值,并从结果字符串中省略尾随逗号。
或者,可以使用更简洁的方法,在开头连接逗号,并使用 STUFF 删除第一个逗号:
<code class="language-sql">SELECT ST2.SubjectID, STUFF( ( 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)'), 1, 1, '') [Students] FROM dbo.Students ST2 GROUP BY ST2.SubjectID</code>
以上是如何将多个 SQL Server 行中的文本连接成单个字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!