적용 대상: Microsoft Fabric의 SQL Server 2025(17.x)
Azure SQL Database
Azure SQL Managed Instance
SQL 데이터베이스
구문은 JSON_OBJECTAGG SQL 데이터 또는 열 집계에서 JSON 개체를 생성합니다.
JSON_OBJECTAGG 는 절이 있는 SELECT 문 GROUP 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) 프리뷰 버전에서.
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_amount 의 SUM 집계 값을 반환합니다 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} |