SQL Server 中的分组字符串聚合
使用 SQL Server 时,一项常见任务是将多行中的字符串值聚合为单个字符串值, 以逗号分隔的字符串。例如,给定一个包含汽车制造商和型号的表,您可能需要创建一个按汽车品牌对汽车型号进行分组的数据集。
SQL Server 的 LISTAGG 的替代方案
在 Oracle 中,此任务通常使用 LISTAGG 函数来完成。但是,SQL Server 没有内置的 LISTAGG 等效项。相反,您可以结合使用 STUFF 和 FOR XML PATH 函数来获得相同的结果。
以下查询演示了如何使用 STUFF 和 FOR XML PATH 在 SQL Server 中实现分组字符串聚合:
SELECT make.CarMakeID, make.CarMake, ( SELECT STUFF( ( SELECT ',' + model.CarModel FROM CarModels WHERE model.CarMakeID = make.CarMakeID FOR XML PATH('') ), 1, 1, '' ) AS CarModels ) FROM CarMakes AS make;
在此查询中,子查询使用 FOR XML PATH 函数将汽车模型连接到单个 XML 字符串中,并以逗号分隔。然后,STUFF 函数删除前导逗号并返回连接的字符串作为 CarModels 列。
以下是查询的输出:
| CarMakeID | CarMake | CarModels | |----------|---------|-----------| | 1 | SuperCars | Zoom, Wow, Awesome | | 2 | MehCars | Mediocrity, YoureSettling |
此技术提供了一种简单而有效的方法在 SQL Server 中实现分组字符串聚合,即使在字符串连接复杂或包含特殊字符的情况下也是如此。
以上是如何在不使用 LISTAGG 的情况下在 SQL Server 中执行分组字符串聚合?的详细内容。更多信息请关注PHP中文网其他相关文章!