SQL Server 多行文本合并成单行字符串
在各种数据库场景中,您可能需要将多行中的字符串值合并成单个、连贯的字符串。当您需要将来自不同数据点的信息整合到一个综合摘要或显示中时,这尤其有用。
问题陈述
考虑一个名为“Names”的表,其中包含以下三行:
挑战
目标是将这些单独的行转换为单个以逗号分隔的字符串:“Peter, Paul, Mary”。
解决方案
在 SQL Server 2017 和 Azure SQL 数据库中,您可以使用 STRING_AGG() 函数来完成此任务。STRING_AGG() 的语法如下:
<code class="language-sql">STRING_AGG(<expression> [ , delimiter ] [ ORDER BY <expression> [ ASC | DESC ] ])</code>
对于我们的场景,表达式将是名称列,分隔符将是逗号。ORDER BY 子句确保名称按特定顺序出现(即字母顺序)。
SQL 查询
<code class="language-sql">SELECT STRING_AGG(Name, ', ') AS ConcatenatedNames FROM Names ORDER BY Name;</code>
输出
<code>ConcatenatedNames --------------------- Peter, Paul, Mary</code>
早期 SQL Server 版本的替代解决方案
如果您使用的是早期版本的 SQL Server,例如 SQL Server 2005,您可以使用以下方法:
<code class="language-sql">SELECT ( SELECT StudentName + ',' AS [text()] FROM dbo.Students WHERE SubjectID = Main.SubjectID ORDER BY StudentID FOR XML PATH('') ).value('text()[1]', 'nvarchar(max)') AS Students FROM ( SELECT DISTINCT SubjectID FROM dbo.Students ) AS Main;</code>
以上是如何在 SQL Server 中将多行文本连接成单个字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!