首页 >数据库 >mysql教程 >如何在没有'AGG”函数的情况下在 SQL Server 中实现字符串聚合?

如何在没有'AGG”函数的情况下在 SQL Server 中实现字符串聚合?

Susan Sarandon
Susan Sarandon原创
2024-12-26 11:13:16849浏览

How Can I Achieve String Aggregation in SQL Server Without an 'AGG' Function?

SQL Server 中的分组字符串聚合:替换为“AGG”

SQL Server 缺少类似于“AGG”的内置字符串聚合函数' 在您提供的查询中。但是,还有其他方法可以将行值连接成分组结果。

一种解决方案利用 FOR XML 和 STUFF 函数。 FOR XML 函数将内部查询的结果转换为 XML,然后可以使用 STUFF 函数对其进行处理以删除 XML 标签并连接字符串。这是一个示例:

SELECT *, 
(SELECT STUFF((
    SELECT ', ' + CarModel
    FROM CarModels model
    WHERE model.CarMakeID = make.CarMakeID
    FOR XML PATH('')
), 1, 1, '') as CarModels
FROM CarMakes make

另一种方法利用 COALESCE 和 ROW_NUMBER 函数。 COALESCE 函数连接非空值,而 ROW_NUMBER 函数在每个组内分配唯一的行号。以下查询使用此方法:

SELECT CarMakeID, CarMake,
    COALESCE(
        (
            SELECT CarModel
            FROM CarModels model
            WHERE model.CarMakeID = make.CarMakeID
            AND ROW_NUMBER() OVER (PARTITION BY make.CarMakeID ORDER BY model.CarModelID) = 1
        ),
        '',
        COALESCE(
            (
                SELECT ', ' + CarModel
                FROM CarModels model
                WHERE model.CarMakeID = make.CarMakeID
                AND ROW_NUMBER() OVER (PARTITION BY make.CarMakeID ORDER BY model.CarModelID) > 1
            )
        )
    ) as CarModels
FROM CarMakes make

这些方法提供了在 SQL Server 中对字符串进行分组和连接的替代方法,从而实现高效且可读的数据聚合。

以上是如何在没有'AGG”函数的情况下在 SQL Server 中实现字符串聚合?的详细内容。更多信息请关注PHP中文网其他相关文章!

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