有效地将子查询结果组合到 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中文网其他相关文章!