Udostępnij za pomocą


JSON_OBJECTAGG (Transact-SQL)

Dotyczy: SQL Server 2025 (17.x) Azure SQL DatabaseAzure SQL Managed InstanceSQL Database w usłudze Microsoft Fabric

Składnia JSON_OBJECTAGG tworzy obiekt JSON z agregacji danych SQL lub kolumn. JSON_OBJECTAGG można również użyć w instrukcji z klauzulą SELECTGROUP BY GROUPING SETS .

Pary klucz/wartość można określić jako wartości wejściowe, kolumnę, odwołania do zmiennych.

Note

Aby utworzyć tablicę JSON na podstawie agregacji, użyj JSON_ARRAYAGG.

Zarówno funkcje agregujące JSON_OBJECTAGG, jak i JSON_ARRAYAGG są:

  • ogólnie dostępny dla usług Azure SQL Database, Azure SQL Managed Instance (z programem SQL Server 2025 lub always-up-to-dateupdate policy**), bazą danych SQL w usłudze Microsoft Fabric i usługą Fabric Data Warehouse.

  • w podglądzie SQL Server 2025 (17.x).

Transact-SQL konwencje składni

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

Para klucz/wartość obiektu JSON.

json_null_clause

Optional. Pomija całą właściwość obiektu, jeśli wartość jest NULL, lub użyj wartości null JSON jako wartości właściwości. W przypadku pominięcia NULL ON NULL jest ustawieniem domyślnym.

Wartość zwracana

Zwraca prawidłowy ciąg obiektu JSON typu nvarchar(max). RETURNING json Jeśli opcja jest dołączona, obiekt JSON jest zwracany jako typ json.

Examples

A. Zwracanie obiektu JSON z jednym kluczem

Poniższy przykład zwraca obiekt JSON z jedną wartością klucza i wartością null.

SELECT JSON_OBJECTAGG('key':NULL);

Oto zestaw wyników.

{"key":null}

B. Konstruowanie obiektu JSON z zestawu wyników

Poniższy przykład tworzy obiekt JSON z trzema właściwościami z zestawu wyników.

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

Oto zestaw wyników.

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

C. Zwraca wynik z dwiema kolumnami

Poniższy przykład zwraca wynik z dwiema kolumnami. Pierwsza kolumna zawiera wartość object_id. Druga kolumna zawiera obiekt JSON, w którym klucz jest nazwą kolumny i wartością jest 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. Zwracanie obiektu JSON jako typu JSON

Poniższy przykład zwraca obiekt JSON jako typ json .

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

wynik

{"a":1}

Oto zestaw wyników.

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. Zwracanie zagregowanego wyniku z czterema kolumnami

Poniższy przykład zwraca wynik z czterema kolumnami z instrukcji zawierającej SELECTSUM instrukcje i JSON_OBJECTAGG agregujące z elementem GROUP BY GROUPING SETS. Dwie pierwsze kolumny zwracają id wartość i type kolumny. Trzecia kolumna total_amount zwraca wartość SUM agregacji w kolumnie amount . Czwarta kolumna json_total_name_amount zwraca wartość JSON_OBJECTAGG agregacji w kolumnach name i 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_OBJECTAGG(name:amount) AS json_total_name_amount
FROM T
GROUP BY GROUPING SETS((id), (type), (id, type), ());

Oto zestaw wyników.

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}