首页 >数据库 >mysql教程 >如何在 SQL Server 中有效地将多个子查询行组合成单个分隔字段?

如何在 SQL Server 中有效地将多个子查询行组合成单个分隔字段?

DDD
DDD原创
2025-01-22 00:32:38277浏览

How to Efficiently Combine Multiple Subquery Rows into a Single Delimited Field in SQL Server?

简化 SQL Server 数据操作:将子查询行组合成单个分隔字段

复杂的数据操作任务通常涉及编写繁琐的代码,例如基于游标的解决方案。 一个常见的挑战是将多个子查询行组合成带有分隔符的单个字段。 本文提出了冗长游标实现的有效替代方案。

考虑两个表,“车辆”和“位置”,其目标是将与每辆车关联的城市名称合并到单个“位置”列中,以逗号分隔。 传统的光标方法需要大量编码。

SQL Server 2005 及更高版本:

更优雅的解决方案使用 FOR XML PATH 命令。这会从“Locations”表生成 XML,用逗号分隔城市名称,然后使用 STUFF 函数将 XML 转换回文本字符串:

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

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>

这两种方法都有效地将多个子查询行组合到单个分隔字段中,与基于游标的方法相比提供了显着改进,从而产生更清晰、更高效的代码并缩短了开发时间。 选择适合您的 SQL Server 版本的方法。

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

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