ホームページ >データベース >mysql チュートリアル >SQL Azure で複数の行の文字列を効率的に連結するにはどうすればよいですか?

SQL Azure で複数の行の文字列を効率的に連結するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-20 08:56:09323ブラウズ

How Can I Efficiently Concatenate Strings from Multiple Rows in SQL Azure?

SQL Azure での文字列集約の最適化

複数の行の文字列を効率的に 1 つの行に結合することは、頻繁に行われるデータ操作タスクです。 一部の集計方法は不適切であることが判明していますが、この課題を克服するための最適なソリューションが存在します。

SQL Azure の最良のアプローチ

SQL Azure には CLR 定義の集計関数がないため、代替戦略が必要です。 次の Transact-SQL アプローチは、効率的なソリューションを提供します。

<code class="language-sql">WITH Partitioned AS (
    SELECT 
        ID,
        Name,
        ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Name) AS NameNumber,
        COUNT(*) OVER (PARTITION BY ID) AS NameCount
    FROM dbo.SourceTable
),
Concatenated AS (
    SELECT 
        ID, 
        CAST(Name AS nvarchar(max)) AS FullName, 
        Name, 
        NameNumber, 
        NameCount 
    FROM Partitioned 
    WHERE NameNumber = 1
    UNION ALL
    SELECT 
        P.ID, 
        CAST(C.FullName + ', ' + P.Name AS nvarchar(max)), 
        P.Name, 
        P.NameNumber, 
        P.NameCount
    FROM Partitioned AS P
        INNER JOIN Concatenated AS C 
                ON P.ID = C.ID 
                AND P.NameNumber = C.NameNumber + 1
)
SELECT 
    ID,
    FullName
FROM Concatenated
WHERE NameNumber = NameCount;</code>

詳細な説明:

このソリューションは 3 つの部分からなるプロセスを採用しています:

  1. 行番号付け: ID を使用して、Name のアルファベット順に各 ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Name) パーティション内の各行に一意の番号を割り当てます。
  2. 再帰的連結: 再帰的な共通テーブル式 (CTE) は、割り当てられた行番号に基づいて Name 値を繰り返し追加します。
  3. 最終選択: 各パーティション内で最も高い NameNumber を持つ行のみを保持するように結果をフィルターし、ID ごとに単一の連結文字列を生成します。

注: このクエリは、ID によるグループ化と文字列のアルファベット昇順を想定しています。特定のデータ構造と要件に応じて、調整が必要になる場合があります。 nvarchar(max) キャストにより、大規模な連結結果に対して十分な文字列長が保証されます。

以上がSQL Azure で複数の行の文字列を効率的に連結するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。