Поделиться через


JSON_ARRAYAGG (Transact-SQL)

Applies to: SQL Server 2025 (17.x) Preview Azure SQL DatabaseAzure SQL Managed InstanceSQL database in Microsoft Fabric

Создает массив JSON из агрегирования данных ИЛИ столбцов SQL. JSON_ARRAYAGGтакже можно использовать в инструкции с GROUP BY GROUPING SETS предложениемSELECT.

To create a JSON object from an aggregate instead, use JSON_OBJECTAGG.

The json aggregate functions JSON_OBJECTAGG and JSON_ARRAYAGG are generally available for Azure SQL Database, Azure SQL Managed Instance (configured with the Always-up-to-date update policy), SQL database in Microsoft Fabric, and Fabric Data Warehouse.

Соглашения о синтаксисе Transact-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 can be used to control the behavior of JSON_ARRAYAGG function when value_expression is NULL. NULL ON NULL Параметр преобразует значение SQL NULL в значение JSON NULL при создании значения элемента в массиве JSON. ABSENT ON NULL Параметр исключает элемент в массиве JSON, если значение равноNULL. Если опущено, 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

В следующем примере возвращается результат с четырьмя столбцами из инструкции SELECT, содержащей sum и JSON_ARRAYAGG агрегаты с помощью GROUP BY GROUPING SETS. Первые два столбца возвращают id значение и type значение столбца. Третий столбец total_amount возвращает значение статистической суммы СУММ в столбце amount . Четвертый столбец json_total_amount возвращает значение JSON_ARRAYAGG агрегата в столбце amount .

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 type 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]