ホームページ > データベース > mysql チュートリアル > SQL Server で複数のサブクエリ行を単一の区切りフィールドに効率的に結合するにはどうすればよいですか?

SQL Server で複数のサブクエリ行を単一の区切りフィールドに効率的に結合するにはどうすればよいですか?

DDD
リリース: 2025-01-22 00:32:38
オリジナル
277 人が閲覧しました

How to Efficiently Combine Multiple Subquery Rows into a Single Delimited Field in SQL Server?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート