다음을 통해 공유


JSON_OBJECTAGG(Transact-SQL)

적용 대상: Microsoft Fabric의 SQL Server 2025(17.x) Azure SQL DatabaseAzure SQL Managed InstanceSQL 데이터베이스

구문은 JSON_OBJECTAGG SQL 데이터 또는 열 집계에서 JSON 개체를 생성합니다. JSON_OBJECTAGG 는 절이 있는 SELECTGROUP BY GROUPING SETS 에도 사용할 수 있습니다.

키/값 쌍을 입력 값, 열, 변수 참조로 지정할 수 있습니다.

Note

대신 집계에서 JSON 배열을 만들려면 JSON_ARRAYAGG 사용합니다.

두 json 집계 함수는 JSON_OBJECTAGG 다음과 같습니다.JSON_ARRAYAGG

  • 일반적으로 Azure SQL Database, Azure SQL Managed Instance( SQL Server 2025 또는 Always-up-to-dateupdate policy**), Microsoft Fabric의 SQL 데이터베이스 및 패브릭 데이터 웨어하우스에 사용할 수 있습니다.

  • SQL Server 2025 (17.x) 프리뷰 버전에서.

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

JSON 개체의 키/값 쌍.

json_null_clause

Optional. 값이 NULL이면 개체의 전체 속성을 생략하거나 JSON null을 속성 값으로 사용합니다. 생략하는 경우, NULL ON NULL이(가) 기본값입니다.

반환 값

nvarchar(max) 형식의 유효한 JSON 개체 문자열을 반환합니다. RETURNING json 옵션이 포함되면 JSON 개체가 json 형식으로 반환됩니다.

Examples

A. 하나의 키를 사용하여 JSON 개체 반환

다음 예제에서는 하나의 키와 null 값이 있는 JSON 개체를 반환합니다.

SELECT JSON_OBJECTAGG('key':NULL);

결과 집합은 다음과 같습니다.

{"key":null}

B. 결과 집합에서 JSON 개체 생성

다음 예제에서는 결과 집합의 세 가지 속성을 사용하여 JSON 개체를 생성합니다.

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

결과 집합은 다음과 같습니다.

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

C. 두 개의 열이 있는 결과를 반환합니다.

다음 예제에서는 두 개의 열이 결과로 반환됩니다. 첫 번째 열에는 object_id 값이 포함됩니다. 두 번째 열에는 키가 열 이름이고 값이 column_id인 JSON 개체가 포함됩니다.

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. JSON 개체를 JSON 형식으로 반환

다음 예제에서는 JSON 개체를 json 형식으로 반환합니다.

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

결과

{"a":1}

결과 집합은 다음과 같습니다.

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. 4개의 열이 있는 집계된 결과 반환

다음 예제에서는 포함하는 문에서 SELECT 열이 4개이고 SUM 집계가 있는 결과를 반환합니다JSON_OBJECTAGG.GROUP BY GROUPING SETS 처음 두 열은 열 값과 id 열을 반환 type 합니다. 세 번째 열은 열 total_amountSUM 집계 값을 반환합니다 amount . 네 번째 열 json_total_name_amount 은 및 JSON_OBJECTAGG 열에 name 대한 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), ());

결과 집합은 다음과 같습니다.

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