次の方法で共有


JSON_ARRAYAGG (Transact-SQL)

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

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

代わりに集計から 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

省略可能。 json_null_clause は、JSON_ARRAYAGG の場合に、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

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

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

結果

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

例 3

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

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

結果

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

例 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;

結果

オブジェクト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 つの列を含む結果を返します。 最初の 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), ());

結果

身分証明書 種類 total_amount json_total_name_amount
1 ある 2 [2]
NULL ある 2 [2]
1 b 7 [4,3]
NULL b 7 [4,3]
2 d 16 [9,7]
NULL d 16 [9,7]
NULL NULL 二十五 [2,4,3,9,7]
1 NULL 9 [3,4,2]
2 NULL 16 [9,7]