Sdílet prostřednictvím


JSON_OBJECTAGG (Transact-SQL)

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

Syntaxe JSON_OBJECTAGG vytvoří objekt JSON z agregace dat NEBO sloupců SQL. JSON_OBJECTAGG lze také použít v SELECT příkazu s klauzulí GROUP BY GROUPING SETS .

Páry klíč/hodnota lze zadat jako vstupní hodnoty, sloupec, odkazy na proměnné.

Note

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

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_OBJECTAGG ( json_key_value [ json_null_clause ] [ RETURNING json ] )

json_key_value ::= <json_name> : <value_expression>

json_null_clause ::= NULL ON NULL | ABSENT ON NULL

Arguments

json_key_value

Dvojice klíč/hodnota objektu JSON.

json_null_clause

Optional. Vynechá celou vlastnost objektu, pokud je hodnota NULL, nebo použijte hodnotu JSON null jako hodnotu vlastnosti. Pokud tento parametr vynecháte, NULL ON NULL je výchozí.

Návratová hodnota

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

Examples

A. Vrácení objektu JSON s jedním klíčem

Následující příklad vrátí objekt JSON s jedním klíčem a hodnotou null.

SELECT JSON_OBJECTAGG('key':NULL);

Tady je soubor výsledků.

{"key":null}

B. Vytvoření objektu JSON ze sady výsledků

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

SELECT JSON_OBJECTAGG(c1:c2)
FROM (
    VALUES('key1', 'c'), ('key2', 'b'), ('key3', 'a')
) AS t(c1, c2);

Tady je soubor výsledků.

{"key1":"c","key2":"b","key3":"a"}

C. Vrácení výsledku se dvěma sloupci

Následující příklad vrátí výsledek se dvěma sloupci. První sloupec obsahuje hodnotu object_id. Druhý sloupec obsahuje objekt JSON, kde klíč je název sloupce a hodnota je column_id.

SELECT TOP (5) c.object_id,
               JSON_OBJECTAGG(c.name:c.column_id) AS columns
FROM sys.columns AS c
GROUP BY c.object_id;

D. Vrácení objektu JSON jako typu JSON

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

SELECT JSON_OBJECTAGG('a':1 RETURNING JSON);

Výsledek

{"a":1}

Tady je soubor výsledků.

object_id column_list
3 {"bitpos":12,"cid":6,"colguid":13,"hbcolid":3,"maxinrowlen":8,"nullbit":11,"offset":10,"ordkey":7,"ordlock":14,"rcmodified":4,"rscolid":2,"rsid":1,"status":9,"ti":5}
5 {"cmprlevel":9,"fgidfs":7,"fillfact":10,"idmajor":3,"idminor":4,"lockres":17,"maxint":13,"maxleaf":12,"maxnullbit":11,"minint":15,"minleaf":14,"numpart":5,"ownertype":2,"rcrows":8,"rowsetid":1,"rsguid":16,"scope_id":18,"status":6}
6 {"cloneid":6,"dbfragid":8,"id":1,"partid":3,"rowsetid":7,"segid":5,"status":9,"subid":2,"version":4}
7 {"auid":1,"fgid":5,"ownerid":3,"pcdata":10,"pcreserved":11,"pcused":9,"pgfirst":6,"pgfirstiam":8,"pgroot":7,"status":4,"type":2}
8 {"fileid":2,"filename":4,"name":3,"status":1}

E. Vrácení agregovaného výsledku se čtyřmi sloupci

Následující příklad vrátí výsledek se čtyřmi sloupci z SELECT příkazu, který obsahuje SUM a JSON_OBJECTAGG agreguje s GROUP BY GROUPING SETS. První dva sloupce vrátí id hodnotu sloupce a type hodnotu sloupce. Třetí sloupec total_amount vrátí hodnotu SUM agregace sloupce amount . Čtvrtý sloupec json_total_name_amount vrátí hodnotu JSON_OBJECTAGG agregace pro name sloupce a amount sloupce.

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_OBJECTAGG(name:amount) AS json_total_name_amount
FROM T
GROUP BY GROUPING SETS((id), (type), (id, type), ());

Tady je soubor výsledků.

id typ total_amount json_total_name_amount
1 a 2 {"k1":2}
NULL a 2 {"k1":2}
1 b 7 {"k3":4,"k2":3}
NULL b 7 {"k3":4,"k2":3}
2 d 16 {"j2":9,"j1":7}
NULL d 16 {"j2":9,"j1":7}
NULL NULL 25 {"k1":2,"k3":4,"k2":3,"j2":9,"j1":7}
1 NULL 9 {"k2":3,"k3":4,"k1":2}
2 NULL 16 {"j2":9,"j1":7}