다음을 통해 공유


JSON_ARRAYAGG(Transact-SQL)

적용 대상: SQL Server 2025(17.x)Microsoft Fabric에서Azure SQL DatabaseAzure SQL Managed Instance SQL 데이터베이스 미리 보기

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

그 대신 집계에서 JSON 개체를 만드려면 JSON_OBJECTAGG를 사용하세요.

참고 항목

json 집계 함수 JSON_OBJECTAGGJSON_ARRAYAGG 모두 Azure SQL Database, Azure SQL Managed Instance( Always-up-to-date 업데이트 정책으로 구성됨) 및 Microsoft Fabric Data Warehouse에서 일반적으로 사용할 수 있습니다.

Transact-SQL 구문 표기 규칙

구문

JSON_ARRAYAGG (value_expression [ order_by_clause ] [ json_null_clause ] )

json_null_clause ::=  NULL ON NULL | ABSENT ON NULL

order_by_clause ::= ORDER BY <column_list>

인수

value_expression

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

json_null_clause

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

order_by_clause

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

예제

예 1

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

SELECT JSON_ARRAYAGG(NULL);

결과

[]

예제 2

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

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

결과

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

예제 3

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

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

결과

["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;

결과

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), ());

결과

아이디 유형 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]