ホームページ >データベース >mysql チュートリアル >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 つの部分からなるプロセスを採用しています:
ID
を使用して、Name
のアルファベット順に各 ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Name)
パーティション内の各行に一意の番号を割り当てます。Name
値を繰り返し追加します。NameNumber
を持つ行のみを保持するように結果をフィルターし、ID
ごとに単一の連結文字列を生成します。注: このクエリは、ID
によるグループ化と文字列のアルファベット昇順を想定しています。特定のデータ構造と要件に応じて、調整が必要になる場合があります。 nvarchar(max)
キャストにより、大規模な連結結果に対して十分な文字列長が保証されます。
以上がSQL Azure で複数の行の文字列を効率的に連結するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。