首页 >数据库 >mysql教程 >如何在 SQL Server 中将多个子查询行连接到单个分隔字段中?

如何在 SQL Server 中将多个子查询行连接到单个分隔字段中?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-22 00:22:11503浏览

How Can I Concatenate Multiple Subquery Rows into a Single Delimited Field in SQL Server?

有效地将子查询结果组合到 SQL Server 中的单个分隔字段

SQL Server 提供了多种方法,用于将子查询中的多行连接到带有分隔符的单个字段中。 虽然服务器端游标是一种选择,但它们通常效率较低。 本文探讨了更有效的技术。

FOR XML PATH:旧版 SQL Server 版本(2005 及以下)的解决方案

对于 SQL Server 2005 及更早版本,FOR XML PATH 命令提供了简洁的解决方案:

<code class="language-sql">SELECT [VehicleID]
     , [Name]
     , (STUFF((SELECT CAST(', ' + [City] AS VARCHAR(MAX)) 
         FROM [Location] 
         WHERE (VehicleID = Vehicle.VehicleID) 
         FOR XML PATH ('')), 1, 2, '')) AS Locations
FROM [Vehicle]</code>

这巧妙地使用 XML 路径生成来连接 City 值,然后 STUFF 删除初始逗号。

STRING_AGG:SQL Server 2017 及更高版本的首选方法

SQL Server 2017及更高版本引入了STRING_AGG,一个显着改进的功能:

<code class="language-sql">SELECT  [VehicleID]
       ,[Name]
       ,(SELECT STRING_AGG([City], ', ')
         FROM [Location]
         WHERE VehicleID = V.VehicleID) AS Locations
FROM   [Vehicle] V</code>

STRING_AGG 提供更好的性能并允许自定义分隔符,使其成为现代 SQL Server 部署的推荐方法。

总结

这些方法提供了在 SQL Server 中将多个子查询行合并为单个分隔字符串的有效方法,从而简化了数据操作任务。 选择合适的方法取决于您的 SQL Server 版本; STRING_AGG 由于其增强的性能和灵活性而成为新版本的首选。

以上是如何在 SQL Server 中将多个子查询行连接到单个分隔字段中?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn