简化 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中文网其他相关文章!