首页 >数据库 >mysql教程 >如何在不使用 LISTAGG 的情况下在 SQL Server 中执行分组字符串聚合?

如何在不使用 LISTAGG 的情况下在 SQL Server 中执行分组字符串聚合?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-29 01:48:10811浏览

How to Perform Grouped String Aggregation in SQL Server Without LISTAGG?

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

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