次の方法で共有


JSON_ARRAYAGG (Transact-SQL)

適用対象:SQL Server 2025 (17.x) プレビュー Azure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric Preview の SQL データベース

SQL データまたは列の集計から JSON 配列を構築します。 JSON_ARRAYAGGは、SELECT句を含むGROUP BY GROUPING SETSステートメントでも使用できます。

代わりに集計から JSON オブジェクトを作成するには、JSON_OBJECTAGGを使用 します

json 集計関数JSON_OBJECTAGGJSON_ARRAYAGGは、Azure SQL Database、Azure SQL Managed Instance (Always-up-to-date 更新ポリシーで構成)、Microsoft Fabric の SQL データベース、および Fabric Data Warehouse で一般提供されています。

Transact-SQL 構文表記規則

Syntax

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>

Arguments

value_expression

値式には、クエリまたは定数/リテラル内の列または式を指定できます。

json_null_clause

Optional. json_null_clauseを使用して、value_expressionがNULLされている場合JSON_ARRAYAGG関数動作を制御できます。 オプション NULL ON NULL を使用すると、JSON 配列内の要素の値を生成するときに、SQL NULL 値が JSON NULL 値に変換されます。 オプション ABSENT ON NULL を使用すると、値が NULL の場合、JSON 配列内の要素が省略されます。 省略すると、ABSENT ON NULL が既定値になります。

order_by_clause

Optional. 結果の JSON 配列内の要素の順序を指定して、入力行を集計に並べ替えることができます。

Examples

Example 1

次の例では、空の JSON 配列を返します。

SELECT JSON_ARRAYAGG(NULL);

Result

[]

Example 2

次の例では、結果セットから 3 つの要素を含む JSON 配列を構築します。

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

Result

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

Example 3

次の例では、列の値で並べ替えられた 3 つの要素を含む JSON 配列を構築します。

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

Result

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

Example 4

次の列は 2 つの列を持つ結果を返します。 最初の列には object_id 値が含まれています。 2 番目の列には、列の名前を含む 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"]

Example 5

次の例では、GROUP BY GROUPING SETS を使用して SUM 集計とJSON_ARRAYAGG集計を含む SELECT ステートメントから 4 つの列を含む結果を返します。 最初の 2 つの列は、 idtype 列の値を返します。 3 番目の列 total_amount は、 amount 列の SUM 集計の値を返します。 4 番目の列 json_total_amount は、 amount 列JSON_ARRAYAGG集計の値を返します。

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 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]