適用対象: SQL Server 2025 (17.x) プレビュー
Azure SQL Database
Azure SQL Managed Instance
SQL データベース
SQL データまたは列の集計から JSON 配列を構築します。 JSON_ARRAYAGGは、GROUP BY GROUPING SETS 句を含む SELECT ステートメントでも使用できます。
代わりに集計から JSON オブジェクトを作成するには、JSON_OBJECTAGG を使用します。
注
json 集計関数JSON_OBJECTAGG
とJSON_ARRAYAGG
の両方が、Azure SQL Database、Azure SQL Managed Instance (Always-up-to-date 更新ポリシーで構成)、および Microsoft Fabric Data Warehouse で一般提供されています。
構文
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 つの列は、 id
と type
列の値を返します。 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] |