JSON と文字列の集計

完了

SQL Server 2025 では、JSON 配列、JSON オブジェクト、および区切り文字列を構築するための新しい集計関数が導入されています。 これらの追加により、API 応答、レポート、T-SQL クエリから直接ログ エクスポートなどの構造化された出力を生成しやすくなります。 新しい関数を使用すると、データの書式設定をデータベース レイヤーに移動できるため、複雑なクライアント側変換の必要性が軽減されます。

JSON および文字列集計関数の概要

3 つの新しい集計関数を見てみましょう。

JSON_ARRAYAGG

式の値から JSON 配列を作成します。 各行の値は、結果の JSON 配列の要素になります。 ID や名前のリストなどの値の配列の生成が簡略化されます。

JSON_OBJECTAGG

キーと値のペアから JSON オブジェクトを作成します。 最初の引数はキーを定義し、2 番目の引数は値を定義します。 この値の組み合わせにより、クエリ結果から直接 JSON ドキュメントを簡単に作成できます。

STRING_AGG

STRING_AGG は、指定した区切り記号を使用して複数の行の値を 1 つの区切り文字列に連結し、 NULL 値を自動的にスキップする集計関数です。 GROUP BY クエリ内の名前、タグ、リストなどの値を効率的に集計する方法が提供されます。 STRING_AGGは、2017 年SQL Serverから提供されています。

文字列連結演算子 ||

SQL Server 2025 では、文字列連結の||の代わりに ANSI 標準の+演算子が導入されています。 より移植可能な構文を提供し、複数の列を 1 つのテキスト出力に結合する場合に推奨されることがよくあります。

UNISTR 関数

UNISTR() はエスケープ シーケンスに基づいて Unicode 文字列を返します。これにより、コード ポイントまたはエスケープ表記で文字を挿入できます。 印刷できない文字や多言語の文字を含むスクリプトを作成する場合に便利です。

Note

JSON_ARRAYAGG JSON_OBJECTAGGは SQL Server 2025 (17.x) のプレビュー段階であり、PREVIEW_FEATURESを有効にする必要があります: ALTER DATABASE SCOPED CONFIGURATION SET PREVIEW_FEATURES = ON;。 これらは、Microsoft Fabricの Azure SQL Database、Azure SQL Managed Instance、および SQL データベースで一般提供されています。

例 1: クエリ結果から JSON 配列とオブジェクトを作成する

データベースが顧客注文データを 2 つのテーブル ( Sales.CustomerSales.SalesOrderHeader) に格納しているとします。 分析チームには、Web ダッシュボードと統合するために、各顧客とその注文 ID を要約した JSON レポートが必要です。

クエリ: JSON_ARRAYAGGとJSON_OBJECTAGGを使用する

次のクエリでは、JSON オブジェクトにラップされた注文 ID の JSON 配列と共に各顧客を取得します。

SELECT
    C.CustomerID,
    C.FirstName + ' ' + C.LastName AS CustomerName,
    JSON_OBJECTAGG(
        'Customer' : C.CustomerID,
        'Orders'   : JSON_ARRAYAGG(SOH.SalesOrderID)
    ) AS CustomerSummary
FROM Sales.Customer AS C
JOIN Sales.SalesOrderHeader AS SOH
    ON C.CustomerID = SOH.CustomerID
GROUP BY C.CustomerID, C.FirstName, C.LastName;

結果

顧客ID 顧客名 顧客概要
11001 ジョーダン・パターソン {"Customer":11001,"Orders":[43722,43723,43724]}
11002 Alicia Tran {"Customer":11002,"Orders":[43725,43726]}
11003 マルコ ディアス {"Customer":11003,"Orders":[43727]}

この例では、 JSON_ARRAYAGG は各顧客のすべての注文 ID を JSON 配列に収集し、 JSON_OBJECTAGG 結果を明確なキーと値のペアを持つ JSON オブジェクトにラップします。 構造体全体は、1 つの T-SQL クエリで生成されます。

例 2: STRING_AGGを使用してテキスト出力を書式設定する

マーケティング チームには、電子メール キャンペーンのコンマで区切られた各顧客の購入製品名の一覧が必要です。 STRING_AGG関数は、NULL 値を省略して、これらの結果をクリーンに生成できます。

クエリ: 製品名を区切り記号で結合する

次のクエリでは、購入した製品のコンマ区切りの一覧と共に各顧客を取得します。

SELECT
    C.CustomerID,
    C.FirstName + ' ' + C.LastName AS CustomerName,
    STRING_AGG(P.Name, ', ') AS ProductsPurchased
FROM Sales.Customer AS C
JOIN Sales.SalesOrderHeader AS SOH
    ON C.CustomerID = SOH.CustomerID
JOIN Sales.SalesOrderDetail AS SOD
    ON SOH.SalesOrderID = SOD.SalesOrderID
JOIN Production.Product AS P
    ON SOD.ProductID = P.ProductID
GROUP BY C.CustomerID, C.FirstName, C.LastName;

結果

顧客ID 顧客名 購入された商品
11001 ジョーダン・パターソン Touring-2000 Blue, 50, Mountain-100 Black, 44
11002 Alicia Tran ロード-250イエロー, 44, マウンテン-200レッド, 48
11003 マルコ ディアス ツーリング-3000ブルー、62

ここでは、 STRING_AGG は製品名をコンマで結合し、NULL エントリを自動的に無視し、手動による COALESCEISNULL ロジックを回避します。

例 3: API 出力用に JSON と区切りテキストを結合する

これらの関数を一緒に使用して、API 応答用の構造化データを準備することもできます。 次のクエリでは、各オブジェクトに顧客の名前とコンマ区切りの製品リストが含まれるオブジェクトの JSON 配列を作成します。

SELECT
    JSON_ARRAYAGG(
        JSON_OBJECTAGG(
            'Customer' : C.FirstName + ' ' + C.LastName,
            'Products' : STRING_AGG(P.Name, ', ')
        )
    ) AS ApiOutput
FROM Sales.Customer AS C
JOIN Sales.SalesOrderHeader AS SOH
    ON C.CustomerID = SOH.CustomerID
JOIN Sales.SalesOrderDetail AS SOD
    ON SOH.SalesOrderID = SOD.SalesOrderID
JOIN Production.Product AS P
    ON SOD.ProductID = P.ProductID
GROUP BY C.CustomerID, C.FirstName, C.LastName;

結果のサンプル

[
  {"Customer":"Jordan Patterson","Products":"Touring-2000 Blue, 50, Mountain-100 Black, 44"},
  {"Customer":"Alicia Tran","Products":"Road-250 Yellow, 44, Mountain-200 Red, 48"},
  {"Customer":"Marco Diaz","Products":"Touring-3000 Blue, 62"}
]

アプリケーションは、この構造を直接使用するか、SQL Server Management Studio (SSMS) や Azure Data Studio などのツールを使用して JSON ドキュメントとしてエクスポートします。

概要

SQL Server 2025 では、T-SQL 内での構造化テキストと JSON 出力の構築を簡略化するために、JSON_ARRAYAGGJSON_OBJECTAGG、およびSTRING_AGGのサポートが追加されました。 これらの関数を使用すると、外部コードなしでクエリからアプリケーション対応のデータを生成できます。 JSON ペイロードの準備、レポートの作成、API 応答の書式設定のいずれを行う場合でも、これらの集計機能により、SQL Server 2025 は最新のデータ アプリケーション用のより汎用性の高いプラットフォームになります。