适用于:SQL Server 2025 (17.x) 在
Microsoft Fabric 预览版中预览
Azure SQL 数据库
Azure SQL 托管实例 SQL 数据库
通过聚合 SQL 数据或列来构造 JSON 数组。
JSON_ARRAYAGG
也可以在包含SELECT
子句的GROUP BY GROUPING SETS
语句中使用。
若要改为从聚合创建 JSON 对象,请使用 JSON_OBJECTAGG。
json 聚合函数JSON_OBJECTAGG
,适用于 JSON_ARRAYAGG
Azure SQL 数据库、Azure SQL 托管实例(配置了 Always-up-to-date 更新策略)、Microsoft Fabric 和 Fabric 数据仓库中的 SQL 数据库。
Syntax
JSON_ARRAYAGG (value_expression [ order_by_clause ] [ json_null_clause ] )
json_null_clause ::= NULL ON NULL | ABSENT ON NULL
order_by_clause ::= ORDER BY <column_list>
Arguments
value_expression
值表达式可以是列或查询或常量/文本中的表达式。
json_null_clause
Optional.
json_null_clause可用于控制value_expressionNULL
时函数的行为JSON_ARRAYAGG
。 在生成 JSON 数组中的元素值时,选项 NULL ON NULL
将 SQL NULL
值转换为 JSON null 值。 如果值为 ABSENT ON NULL
,选项 NULL
将省略 JSON 数组中的元素。 如果省略,则 ABSENT ON NULL
为默认值。
order_by_clause
Optional. 可以指定所生成 JSON 数组中的元素顺序,以便对输入的行进行排序,从而实现聚合。
Examples
Example 1
以下示例返回空 JSON 数组。
SELECT JSON_ARRAYAGG(NULL);
Result
[]
Example 2
以下示例构建具有三个来自结果集的元素的 JSON 数组。
SELECT JSON_ARRAYAGG(c1)
FROM (VALUES ('c'), ('b'), ('a')) AS t(c1);
Result
["c","b","a"]
Example 3
以下示例将构造一个 JSON 数组,其中包含三个按列值排序的元素。
SELECT JSON_ARRAYAGG( c1 ORDER BY c1)
FROM (
VALUES ('c'), ('b'), ('a')
) AS t(c1);
Result
["a","b","c"]
Example 4
以下示例返回包含两列的结果。 第一列包含 object_id
值。 第二列包含一个 JSON 数组,其中包含列的名称。 JSON 数组中的列根据 column_id
值进行排序。
SELECT TOP(5) c.object_id, JSON_ARRAYAGG(c.name ORDER BY c.column_id) AS column_list
FROM sys.columns AS c
GROUP BY c.object_id;
Result
object_id | column_list |
---|---|
3 | ["rsid","rscolid","hbcolid","rcmodified","ti","cid","ordkey","maxinrowlen","status","offset","nullbit","bitpos","colguid","ordlock"] |
5 | ["rowsetid","ownertype","idmajor","idminor","numpart","status","fgidfs","rcrows","cmprlevel","fillfact","maxnullbit","maxleaf","maxint","minleaf","minint","rsguid","lockres","scope_id"] |
6 | ["id","subid","partid","version","segid","cloneid","rowsetid","dbfragid","status"] |
7 | ["auid","type","ownerid","status","fgid","pgfirst","pgroot","pgfirstiam","pcused","pcdata","pcreserved"] |
8 | ["status","fileid","name","filename"] |
Example 5
以下示例返回一个结果,其中包含 SUM 的 SELECT 语句中的四列,并使用 GROUP BY GROUPING SETS JSON_ARRAYAGG聚合。 前两列返回和id
type
列值。 第三列 total_amount
返回列上的 amount
SUM 聚合值。 第四列 json_total_amount
返回列上的 amount
JSON_ARRAYAGG聚合的值。
WITH T
AS (SELECT *
FROM (VALUES (1, 'k1', 'a', 2), (1, 'k2', 'b', 3), (1, 'k3', 'b', 4), (2, 'j1', 'd', 7), (2, 'j2', 'd', 9)) AS b(id, name, type, amount))
SELECT id,
type,
SUM(amount) AS total_amount,
JSON_ARRAYAGG(amount) AS json_total_amount
FROM T
GROUP BY GROUPING SETS((id), (type), (id, type), ());
Result
id | 类型 | total_amount | json_total_name_amount |
---|---|---|---|
1 | a | 2 | [2] |
NULL |
a | 2 | [2] |
1 | b | 7 | [4,3] |
NULL |
b | 7 | [4,3] |
2 | d | 16 | [9,7] |
NULL |
d | 16 | [9,7] |
NULL |
NULL |
25 | [2,4,3,9,7] |
1 | NULL |
9 | [3,4,2] |
2 | NULL |
16 | [9,7] |