適用対象: SQL Server 2025 (17.x)
Azure SQL Database
Azure SQL Managed Instance
SQL データベース
SQL データまたは列の集計から JSON 配列を構築します。
JSON_ARRAYAGGは、SELECT句を含むGROUP BY GROUPING SETSステートメントでも使用できます。
注
代わりに集計から JSON オブジェクトを作成するには、JSON_OBJECTAGGを使用 します。
json 集計関数JSON_OBJECTAGGとJSON_ARRAYAGGの両方を次に示します。
Azure SQL Database、Azure SQL Managed Instance ( SQL Server 2025 または Always-up-to-date更新ポリシー**)、Microsoft Fabric の SQL データベース、および Fabric Data Warehouse で一般提供されています。
SQL Server 2025(17.x)のプレビュー版です。
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
次の例では、結果セットから 3 つの要素を含む JSON 配列を構築します。
SELECT JSON_ARRAYAGG(c1)
FROM (VALUES ('c'), ('b'), ('a')) AS t(c1);
Result
["c","b","a"]
例 3
次の例では、列の値で並べ替えられた 3 つの要素を含む JSON 配列を構築します。
SELECT JSON_ARRAYAGG( c1 ORDER BY c1)
FROM (
VALUES ('c'), ('b'), ('a')
) AS t(c1);
Result
["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;
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 つの列を含む結果を返します。 最初の 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), ());
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] |
例 6
次の例では、JSON 配列を json 型として返します。
SELECT JSON_ARRAYAGG(1 RETURNING JSON);
Result
[1]