Partager via


JSON_ARRAYAGG (Transact-SQL)

S’applique à : Base de données SQL Server 2025 (17.x) Azure SQL DatabaseAzure SQL Managed InstanceSQL dans Microsoft Fabric

Construit un tableau JSON à partir d’une agrégation de données ou de colonnes SQL. JSON_ARRAYAGG peut également être utilisé dans une SELECT instruction avec GROUP BY GROUPING SETS une clause.

Note

Pour créer un objet JSON à partir d’un agrégat, utilisez plutôt JSON_OBJECTAGG.

Les deux fonctions d’agrégation JSON_OBJECTAGG et JSON_ARRAYAGG sont les suivantes :

  • généralement disponible pour Azure SQL Database, Azure SQL Managed Instance (avec SQL Server 2025 ou Always-up-to-datede mise à jour policy**), base de données SQL dans Microsoft Fabric et Fabric Data Warehouse.

  • en aperçu pour SQL Server 2025 (17.x).

Conventions de la syntaxe Transact-SQL

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

L’expression de valeur peut être une colonne ou une expression dans une requête ou des constantes/littéraux.

json_null_clause

Optional. json_null_clause pouvez être utilisé pour contrôler le comportement de JSON_ARRAYAGG la fonction lorsque value_expression est NULL. L’option NULL ON NULL convertit la valeur NULL SQL en valeur null JSON lors de la génération de la valeur de l’élément dans le tableau JSON. L’option ABSENT ON NULL omet l’élément dans le tableau JSON si la valeur est NULL. En cas d’omission, ABSENT ON NULL est la valeur par défaut.

order_by_clause

Optional. L’ordre des éléments dans le tableau JSON résultant peut être spécifié pour classer les lignes d’entrée dans l’agrégat.

Valeur retournée

Retourne une chaîne de tableau JSON valide de type nvarchar(max). Si l’option RETURNING json est incluse, le tableau JSON est retourné en tant que type json .

Examples

Exemple 1

L’exemple suivant retourne un tableau JSON vide.

SELECT JSON_ARRAYAGG(NULL);

Result

[]

Exemple 2

L'exemple suivant construit un tableau JSON avec trois éléments à partir d'un jeu de résultats.

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

Result

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

Exemple 3

L’exemple suivant construit un tableau JSON avec trois éléments classés par la valeur de la colonne.

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

Result

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

Exemple 4

L'exemple suivant renvoie un résultat avec deux colonnes. La première colonne contient la valeur object_id. La deuxième colonne contient un tableau JSON contenant les noms des colonnes. Les colonnes du tableau JSON sont classées en fonction de la valeur 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"]

Exemple 5

L’exemple suivant retourne un résultat avec quatre colonnes d’une instruction SELECT contenant SUM et JSON_ARRAYAGG agrégats avec GROUP BY GROUPING SETS. Les deux premières colonnes retournent la valeur et id la type valeur de colonne. La troisième colonne total_amount retourne la valeur de l’agrégat SUM sur la amount colonne. La quatrième colonne json_total_amount retourne la valeur de JSON_ARRAYAGG’agrégat sur la amount colonne.

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

Exemple 6

L’exemple suivant retourne un tableau JSON en tant que type json .

SELECT JSON_ARRAYAGG(1 RETURNING JSON);

Result

[1]