Sdílet prostřednictvím


JSON_ARRAYAGG (Transact-SQL)

Platí pro: SQL Server 2025 (17.x) Azure SQL Database Azure SQLManaged InstanceSQL Database v Microsoft Fabric

Vytvoří pole JSON z agregace dat NEBO sloupců SQL. JSON_ARRAYAGG lze také použít v SELECT příkazu s klauzulí GROUP BY GROUPING SETS .

Poznámka:

Pokud chcete místo toho vytvořit objekt JSON z agregace, použijte JSON_OBJECTAGG.

Agregační funkce JSON_OBJECTAGG a JSON_ARRAYAGG jsou:

  • Obecně dostupné pro Azure SQL Database, Azure SQL Managed Instance (s SQL Serverem 2025 nebo always-up-to-dateupdate policy**), databází SQL v Microsoft Fabric a Fabric Data Warehouse.

  • v preview pro SQL Server 2025 (17.x).

Transact-SQL konvence syntaxe

Syntax

JSON_ARRAYAGG (value_expression [ order_by_clause ] [ json_null_clause ] [ RETURNING json ] )

json_null_clause ::=  NULL ON NULL | ABSENT ON NULL

order_by_clause ::= ORDER BY <column_list>

Arguments

value_expression

Výrazem hodnoty může být sloupec nebo výraz v dotazu nebo konstanty nebo literály.

json_null_clause

Optional. json_null_clause lze použít k řízení chování JSON_ARRAYAGG funkce při value_expression je NULL. Možnost NULL ON NULL při generování hodnoty elementu v poli JSON převede hodnotu SQL NULL na hodnotu NULL JSON. Možnost ABSENT ON NULL vynechá prvek v poli JSON, pokud je hodnota NULL. Pokud tento parametr vynecháte, ABSENT ON NULL je výchozí.

order_by_clause

Optional. Pořadí prvků ve výsledném poli JSON lze zadat tak, aby se vstupní řádky uspořádaly do agregace.

Návratová hodnota

Vrátí platný řetězec pole JSON typu nvarchar(max ). Pokud je tato RETURNING json možnost zahrnutá, vrátí se pole JSON jako typ JSON .

Examples

Příklad 1

Následující příklad vrátí prázdné pole JSON.

SELECT JSON_ARRAYAGG(NULL);

Result

[]

Příklad 2

Následující příklad vytvoří pole JSON se třemi prvky ze sady výsledků.

SELECT JSON_ARRAYAGG(c1)
FROM (VALUES ('c'), ('b'), ('a')) AS t(c1);

Result

["c","b","a"]

Příklad 3

Následující příklad vytvoří pole JSON se třemi prvky seřazenými podle hodnoty sloupce.

SELECT JSON_ARRAYAGG( c1 ORDER BY c1)
FROM (
    VALUES ('c'), ('b'), ('a')
) AS t(c1);

Result

["a","b","c"]

Příklad 4

Následující příklad vrátí výsledek se dvěma sloupci. První sloupec obsahuje hodnotu object_id. Druhý sloupec obsahuje pole JSON obsahující názvy sloupců. Sloupce v poli JSON jsou seřazené na základě column_id hodnoty.

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

Příklad 5

Následující příklad vrátí výsledek se čtyřmi sloupci z příkazu SELECT obsahující suma a JSON_ARRAYAGG agregace pomocí GROUP BY GROUPING SETS. První dva sloupce vrátí id hodnotu sloupce a type hodnotu sloupce. Třetí sloupec total_amount vrátí hodnotu agregace SUM pro amount sloupec. Čtvrtý sloupec json_total_amount vrátí hodnotu JSON_ARRAYAGG agregaci sloupce 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 typ 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]

Příklad 6

Následující příklad vrátí pole JSON jako typ JSON .

SELECT JSON_ARRAYAGG(1 RETURNING JSON);

Result

[1]