SQL Server 2017 STRING_AGG 排序依据

eva*_*ren 3 sql sql-server sql-server-2017 string-agg

我在 Windows 上使用 SQL Server 2017 Microsoft SQL Server 2017 (RTM-GDR) (KB4583456) - 14.0.2037.2 (X64) 2020 年 11 月 2 日 19:19:59 版权所有 (C) 2017 Microsoft Corporation Developer Edition(64 位) 10 Pro 10.0(内部版本 19042:)。

我正在尝试对 STRING_AGG 函数的结果进行排序。

这很好用

SELECT STRING_AGG(Category,', ') AS Result
FROM LegacyReviews_Categories
Run Code Online (Sandbox Code Playgroud)

这给了我错误“Msg 102,Level 15,State 1,Line 1 '('附近的语法不正确。”

SELECT STRING_AGG(Category,', ') WITHIN GROUP ( ORDER BY Category ASC) AS Result
FROM LegacyReviews_Categories
Run Code Online (Sandbox Code Playgroud)

Mar*_*ith 8

我也可以在 SQL Server 2019 build 15.0.4198.2 上重现这一点。

COMPATIBILITY_LEVEL它只需要在设置为(2008)的数据库上下文中运行查询100

在此输入图像描述

所有其他(更高版本)兼容性级别均有效。

文档指出

STRING_AGG 在任何兼容级别都可用。

并且没有提到这一点。

如果您无法将数据库的兼容性级别更改为更高的级别,那么您可能需要退回到XML PATH连接有序结果的旧方法。

  • 我怀疑这是因为虽然“STRING_AGG”可以在任何兼容性中使用,但“WITHIN GROUP”却不能,因为它是在 2012 年通过“PERCENTILE_DISC”和“PERCENTILE_CONT”添加的。虽然我没有 2017 年的实例来测试这两个想法。 (2认同)