SQL Server データ操作の合理化: サブクエリ行を単一の区切りフィールドに結合する
複雑なデータ操作タスクには、カーソルベースのソリューションなど、面倒なコードの作成が含まれることがよくあります。 一般的な課題は、複数のサブクエリ行を区切り文字を使用して 1 つのフィールドに結合することです。 この記事では、長いカーソル実装に代わる効率的な代替案を紹介します。
「Vehicles」と「Locations」という 2 つのテーブルについて考えます。ここでの目標は、各車両に関連付けられた都市名をカンマ区切りの 1 つの「Locations」列に統合することです。 従来のカーソルによるアプローチでは、大規模なコーディングが必要です。
SQL Server 2005 以降:
より洗練されたソリューションでは、FOR XML PATH
コマンドを使用します。これにより、都市名をカンマで区切って「Locations」テーブルから XML が生成され、STUFF
関数を使用して XML がテキスト文字列に変換されます。
<code class="language-sql">SELECT [VehicleID], [Name], (STUFF((SELECT ',' + [City] FROM [Location] WHERE (VehicleID = Vehicle.VehicleID) FOR XML PATH('')), 1, 1, '')) AS Locations FROM [Vehicle]</code>
SQL Server 2017 以降:
パフォーマンスと簡素化を向上させるために、SQL Server 2017 以降のバージョンでは STRING_AGG
関数が提供されています。この関数は、2 番目のパラメータとして区切り文字を受け入れ、値を単一の文字列に直接集約します:
<code class="language-sql">SELECT [VehicleID], [Name], (SELECT STRING_AGG([City], ', ') FROM [Location] WHERE VehicleID = V.VehicleID) AS Locations FROM [Vehicle] V</code>
どちらの方法も、複数のサブクエリ行を 1 つの区切り文字で区切られたフィールドに効果的に結合し、カーソルベースのアプローチよりも大幅に改善され、よりクリーンで効率的なコードが得られ、開発時間が短縮されます。 SQL Server のバージョンに適した方法を選択してください。
以上がSQL Server で複数のサブクエリ行を単一の区切りフィールドに効率的に結合するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。