Bagikan melalui


JSON_OBJECTAGG (Transact-SQL)

Berlaku untuk: Database SQL SQL Server 2025 (17.x) Azure SQL DatabaseAzure SQL Managed Instancedi Microsoft Fabric

Sintaks JSON_OBJECTAGG membangun objek JSON dari agregasi data atau kolom SQL. JSON_OBJECTAGG juga dapat digunakan dalam SELECT pernyataan dengan GROUP BY GROUPING SETS klausa.

Pasangan kunci/nilai dapat ditentukan sebagai nilai input, kolom, referensi variabel.

Note

Untuk membuat array JSON dari agregat, gunakan JSON_ARRAYAGG.

Kedua fungsi agregat JSON_OBJECTAGG dan JSON_ARRAYAGG adalah:

  • umumnya tersedia untuk Azure SQL Database, Azure SQL Managed Instance (dengan SQL Server 2025 atau Always-up-to-dateupdate policy**), database SQL di Microsoft Fabric, dan Fabric Data Warehouse.

  • dalam pratinjau untuk SQL Server 2025 (17.x).

Konvensi sintaks transact-SQL

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

Pasangan kunci/nilai objek JSON.

json_null_clause

Optional. Menghilangkan seluruh properti objek jika nilainya adalah NULL, atau gunakan JSON null sebagai nilai properti. Jika dihilangkan, NULL ON NULL adalah default.

Mengembalikan nilai

Mengembalikan string objek JSON yang valid dari jenis nvarchar(maks ). RETURNING json Jika opsi disertakan maka objek JSON dikembalikan sebagai jenis json.

Examples

A. Mengembalikan objek JSON dengan satu kunci

Contoh berikut mengembalikan objek JSON dengan satu kunci dan nilai null.

SELECT JSON_OBJECTAGG('key':NULL);

Berikut kumpulan hasilnya.

{"key":null}

B. Membuat objek JSON dari tataan hasil

Contoh berikut membuat objek JSON dengan tiga properti dari kumpulan hasil.

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

Berikut kumpulan hasilnya.

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

C. Mengembalikan hasil dengan dua kolom

Contoh berikut mengembalikan hasil dengan dua kolom. Kolom pertama berisi object_id nilai . Kolom kedua berisi objek JSON di mana kuncinya adalah nama dan nilai kolom adalah 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. Mengembalikan objek JSON sebagai jenis JSON

Contoh berikut mengembalikan objek JSON sebagai jenis json .

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

Hasil

{"a":1}

Berikut kumpulan hasilnya.

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. Mengembalikan hasil agregat dengan empat kolom

Contoh berikut mengembalikan hasil dengan empat kolom dari pernyataan yang SELECT berisi SUM dan JSON_OBJECTAGG mengagregasi dengan GROUP BY GROUPING SETS. Dua kolom pertama mengembalikan id nilai kolom dan type . Kolom total_amount ketiga mengembalikan nilai SUM agregat pada amount kolom. Kolom keempat json_total_name_amount mengembalikan nilai JSON_OBJECTAGG agregat pada name kolom dan 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), ());

Berikut kumpulan hasilnya.

id jenis 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}