다음을 통해 공유


JSON_ARRAYAGG(Transact-SQL)

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

SQL 데이터 또는 열 집계에서 JSON 배열을 생성하세요. JSON_ARRAYAGG 는 절이 있는 SELECTGROUP BY GROUPING SETS 에도 사용할 수 있습니다.

비고

대신 집계에서 JSON 개체를 만들려면 JSON_OBJECTAGG 사용합니다.

두 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_ARRAYAGG (value_expression [ order_by_clause ] [ json_null_clause ] [ RETURNING json ] )

json_null_clause ::=  NULL ON NULL | ABSENT ON NULL

order_by_clause ::= ORDER BY <column_list>

Arguments

value_expression

값 식은 쿼리 또는 상수/리터럴의 열 또는 식일 수 있습니다.

json_null_clause

Optional. json_null_clause value_expression 때 함수의 JSON_ARRAYAGG 동작을 제어하는 데 사용할 수 있습니다.NULL NULL ON NULL 옵션은 JSON 배열에서 요소 값을 생성할 때 SQL NULL 값을 JSON null 값으로 변환합니다. 값이 ABSENT ON NULL인 경우 NULL옵션은 JSON 배열의 요소를 생략합니다. 생략하는 경우, ABSENT ON NULL이(가) 기본값입니다.

order_by_clause

Optional. 결과 JSON 배열의 요소 순서를 지정하여 입력 행을 집계로 정렬할 수 있습니다.

반환 값

nvarchar(max) 형식의 유효한 JSON 배열 문자열을 반환합니다. RETURNING json 옵션이 포함된 경우 JSON 배열이 json 형식으로 반환됩니다.

Examples

예제 1

다음 예에서는 빈 JSON 배열을 반환합니다.

SELECT JSON_ARRAYAGG(NULL);

Result

[]

예제 2

다음 예제에서 결과 집합에 세 개의 요소가 있는 JSON 배열을 구성합니다.

SELECT JSON_ARRAYAGG(c1)
FROM (VALUES ('c'), ('b'), ('a')) AS t(c1);

Result

["c","b","a"]

예제 3

다음 예제에서는 열 값으로 정렬된 세 개의 요소를 사용하여 JSON 배열을 생성합니다.

SELECT JSON_ARRAYAGG( c1 ORDER BY c1)
FROM (
    VALUES ('c'), ('b'), ('a')
) AS t(c1);

Result

["a","b","c"]

예제 4

다음 예제에서는 두 개의 열이 결과로 반환됩니다. 첫 번째 열에는 object_id 값이 포함됩니다. 두 번째 열에는 열 이름이 포함된 JSON 배열이 포함됩니다. JSON 배열의 열은 column_id 값에 따라 정렬됩니다.

SELECT TOP(5) c.object_id, JSON_ARRAYAGG(c.name ORDER BY c.column_id) AS column_list
FROM sys.columns AS c
GROUP BY c.object_id;

Result

object_id column_list
3 ["rsid","rscolid","hbcolid","rcmodified","ti","cid","ordkey","maxinrowlen","status","offset","nullbit","bitpos","colguid","ordlock"]
5 ["rowsetid","ownertype","idmajor","idminor","numpart","status","fgidfs","rcrows","cmprlevel","fillfact","maxnullbit","maxleaf","maxint","minleaf","minint","rsguid","lockres","scope_id"]
6 ["id","subid","partid","version","segid","cloneid","rowsetid","dbfragid","status"]
7 ["auid","type","ownerid","status","fgid","pgfirst","pgroot","pgfirstiam","pcused","pcdata","pcreserved"]
8 ["status","fileid","name","filename"]

예제 5

다음 예제에서는 GROUP BY GROUPING SETS를 사용하여 SUM 및 JSON_ARRAYAGG 집계를 포함하는 SELECT 문에서 4개의 열이 있는 결과를 반환합니다. 처음 두 열은 열 값과 id 열을 반환 type 합니다. 세 번째 열은 열 total_amount 에 대한 SUM 집계 값을 반환합니다 amount . 네 번째 열은 열 json_total_amount 에서 JSON_ARRAYAGG 집계 값을 반환합니다 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_ARRAYAGG(amount) AS json_total_amount
FROM T
GROUP BY GROUPING SETS((id), (type), (id, type), ());

Result

id type total_amount json_total_name_amount
1 a 2 [2]
NULL a 2 [2]
1 b 7 [4,3]
NULL b 7 [4,3]
2 d 16 [9,7]
NULL d 16 [9,7]
NULL NULL 25 [2,4,3,9,7]
1 NULL 9 [3,4,2]
2 NULL 16 [9,7]

예제 6

다음 예제에서는 JSON 배열을 json 형식으로 반환합니다.

SELECT JSON_ARRAYAGG(1 RETURNING JSON);

Result

[1]