SQL Azure 文字列の効率的な接続ソリューション
SQL Azure では、異種の文字列データを 1 つのエンティティに効率的に集約することが重要です。 SQL Azure には CLR カスタム集計関数が欠如しているため、効率的な代替関数を見つける必要があります。
トランザクション SQL ソリューション
効率的な方法は、WITH 句と再帰 CTE (共通テーブル式) を使用することです。このメソッドには以下が含まれます:
説明
次のお問い合わせをご検討ください:
<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>
例
次のデータの場合:
<code>ID Name ------- -------- 1 Matt 1 Rocks 2 Stylus 3 Foo 3 Bar 3 Baz</code>
次の集計結果を返します:
<code>ID FullName ------- --------------------- 1 Matt, Rocks 2 Stylus 3 Foo, Bar, Baz</code>
メリット
注: nvarchar データ型の長さのオーバーフローを回避するには、CAST の型を nvarchar(max) に変更します。 また、例の結果の並べ替えは元のテキストと若干異なります。これは、ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Name) の並べ替えの基準が [名前] フィールドであるため、並べ替え結果が異なります。 特定の並べ替え方法が必要な場合は、ORDER BY 句を変更します。
以上がCLR 集計関数を使用せずに SQL Azure で文字列を最適に連結するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。