适用于: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 托管实例(SQL Server 2025 或 Always-up-to-dateupdate policy**)、Microsoft Fabric 和 Fabric 数据仓库中的 SQL 数据库。
- SQL Server 2025 (17.x) 预览版。
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可用于控制JSON_ARRAYAGG时函数的行为NULL。 在生成 JSON 数组中的元素值时,选项 NULL ON NULL 将 SQL NULL 值转换为 JSON null 值。 如果值为 ABSENT ON NULL,选项 NULL 将省略 JSON 数组中的元素。 如果省略,则 ABSENT ON NULL 为默认值。
order_by_clause
Optional. 可以指定所生成 JSON 数组中的元素顺序,以便对输入的行进行排序,从而实现聚合。
Examples
示例 1
以下示例返回空 JSON 数组。
SELECT JSON_ARRAYAGG(NULL);
Result
[]
示例 2
以下示例构建具有三个来自结果集的元素的 JSON 数组。
SELECT JSON_ARRAYAGG(c1)
FROM (VALUES ('c'), ('b'), ('a')) AS t(c1);
Result
["c","b","a"]
示例 3
以下示例将构造一个 JSON 数组,其中包含三个按列值排序的元素。
SELECT JSON_ARRAYAGG( c1 ORDER BY c1)
FROM (
VALUES ('c'), ('b'), ('a')
) AS t(c1);
Result
["a","b","c"]
示例 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"] |
示例 5
以下示例返回一个结果,其中包含 SUM 的 SELECT 语句中的四列,并使用 GROUP BY GROUPING SETS JSON_ARRAYAGG聚合。 前两列返回和idtype列值。 第三列 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] |