Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: SQL Server 2025 (17.x) Vorschau der
Azure SQL-Datenbank
azureSQL Managed Instance
SQL SQL-Datenbank in Microsoft Fabric
Erstellt ein JSON-Array aus einer Aggregation von SQL-Daten oder -Spalten. JSON_ARRAYAGG können auch in einer SELECT-Anweisung mit GROUP BY GROUPING SETS-Klausel verwendet werden.
Verwenden Sie JSON_OBJECTAGG, um stattdessen ein JSON-Objekt aus einem Aggregat zu erstellen.
Hinweis
Sowohl json-AggregatfunktionenJSON_OBJECTAGG
als JSON_ARRAYAGG
auch allgemein verfügbar für Azure SQL-Datenbank, Azure SQL Managed Instance (konfiguriert mit der Always-up-to-Datumsaktualisierungsrichtlinie) und Microsoft Fabric Data Warehouse.
Transact-SQL-Syntaxkonventionen
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>
Argumente
value_expression
Der Wertausdruck kann eine Spalte oder ein Ausdruck in einer Abfrage oder Konstanten/Literale sein.
json_null_clause
Wahlfrei.
json_null_clause kann zum Steuern des Verhaltens der Funktion JSON_ARRAYAGG
verwendet werden, wenn value_expression gleich NULL
ist. Die Option NULL ON NULL
konvertiert den SQL-NULL
-Wert in einen JSON-Null-Wert, wenn der Wert des Elements im JSON-Array generiert wird. Die Option ABSENT ON NULL
lässt das Element im JSON-Array aus, wenn der Wert NULL
ist. Wenn nicht angegeben, ist ABSENT ON NULL
der Standardwert.
order_by_clause
Wahlfrei. Die Reihenfolge der Elemente im resultierenden JSON-Array kann angegeben werden, um die Eingabezeilen an das Aggregat zu ordnen.
Beispiele
Beispiel 1
Im folgenden Beispiel wird ein leeres JSON-Array zurückgegeben.
SELECT JSON_ARRAYAGG(NULL);
Ergebnis
[]
Beispiel 2
Im folgenden Beispiel wird ein JSON-Array mit drei Elementen aus einem Resultset erstellt.
SELECT JSON_ARRAYAGG(c1)
FROM (VALUES ('c'), ('b'), ('a')) AS t(c1);
Ergebnis
["c","b","a"]
Beispiel 3
Im folgenden Beispiel wird ein JSON-Array mit drei Elementen erstellt, die nach dem Wert der Spalte sortiert sind.
SELECT JSON_ARRAYAGG( c1 ORDER BY c1)
FROM (
VALUES ('c'), ('b'), ('a')
) AS t(c1);
Ergebnis
["a","b","c"]
Beispiel 4
Im folgenden Beispiel wird ein Ergebnis mit zwei Spalten zurückgegeben. Die erste Spalte enthält den Wert object_id
. Die zweite Spalte enthält ein JSON-Array, das die Namen der Spalten enthält. Die Spalten im JSON-Array werden basierend auf dem Wert column_id
sortiert.
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;
Ergebnis
Objekt-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"] |
Beispiel 5
Im folgenden Beispiel wird ein Ergebnis mit vier Spalten aus einer SELECT-Anweisung zurückgegeben, die SUMME enthält, und JSON_ARRAYAGG Aggregate mit GROUP BY GROUPING SETS. Die ersten beiden Spalten geben den Wert und id
den type
Spaltenwert zurück. Die dritte Spalte total_amount
gibt den Wert des SUMME-Aggregats in der amount
Spalte zurück. Die vierte Spalte json_total_amount
gibt den Wert JSON_ARRAYAGG Aggregats in der amount
Spalte zurück.
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), ());
Ergebnis
id | Typ | total_amount | json_total_name_amount |
---|---|---|---|
1 | ein | 2 | [2] |
NULL |
ein | 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] |