ホームページ >データベース >mysql チュートリアル >複数の SQL 行を 1 つの区切り文字で区切られたフィールドに結合するにはどうすればよいですか?
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 サイトの他の関連記事を参照してください。