ホームページ >データベース >mysql チュートリアル >複数の SQL 行を 1 つの区切り文字で区切られたフィールドに結合するにはどうすればよいですか?

複数の SQL 行を 1 つの区切り文字で区切られたフィールドに結合するにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-22 00:27:09710ブラウズ

How to Combine Multiple SQL Rows into a Single Delimited Field?

SQL Server 関数: 複数の SQL 行を 1 つの区切り文字で区切られたフィールドに結合する

サブクエリの複数の行を SQL Server 内の単一の区切られたフィールドに効率的にマージするには、堅牢なアプローチが必要です。 この記事では、さまざまな SQL Server バージョンに適した 2 つの効果的な手法を紹介します。

XML パスの場合 (SQL Server 2005 以降):

このメソッドは SQL Server 2005 以降のバージョンと互換性があり、文字列連結に FOR XML PATH コマンドを利用します。 以下に例を示します:

<code class="language-sql">SELECT [VehicleID], [Name], 
       (STUFF((SELECT CAST(', ' + [City] AS VARCHAR(MAX)) 
               FROM [Location] 
               WHERE (VehicleID = Vehicle.VehicleID) 
               FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '')) AS Locations
FROM [Vehicle]</code>

このクエリは、FOR XML PATH を使用して、各 VehicleID の都市値のカンマ区切り文字列を構築します。 STUFF 関数は、先頭のカンマを削除します。

STRING_AGG (SQL Server 2017 以降):

SQL Server 2017 以降の場合、STRING_AGG 関数はよりクリーンで効率的なソリューションを提供します。

<code class="language-sql">SELECT [VehicleID], [Name], 
       (SELECT STRING_AGG([City], ', ') 
        FROM [Location] 
        WHERE VehicleID = V.VehicleID) AS Locations
FROM [Vehicle] V</code>

STRING_AGG は、指定された区切り文字 (この場合はカンマとスペース) を使用して City 値を直接連結します。 このアプローチは、可読性とパフォーマンスが向上するため、一般に好まれます。

どちらの方法も、複数の行のデータを効果的に 1 つの区切りフィールドに集約し、SQL Server 内でのデータ操作を簡素化します。 最適な結果を得るには、SQL Server のバージョンに最も適した方法を選択してください。

以上が複数の SQL 行を 1 つの区切り文字で区切られたフィールドに結合するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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