SQL Server 2005を使用している場合は、FORXMLPATHコマンドを使用できます。
SELECT [VehicleID]
, [Name]
, (STUFF((SELECT CAST(', ' + [City] AS VARCHAR(MAX))
FROM [Location]
WHERE (VehicleID = Vehicle.VehicleID)
FOR XML PATH ('')), 1, 2, '')) AS Locations
FROM [Vehicle]
カーソルを使用するよりもはるかに簡単で、かなりうまく機能しているようです。
更新
新しいバージョンのSQLServerでこのメソッドをまだ使用している場合は、STRING_AGG
を使用すると、少し簡単でパフォーマンスが向上する別の方法があります。 SQLServer2017以降で使用できるメソッド。
SELECT [VehicleID]
,[Name]
,(SELECT STRING_AGG([City], ', ')
FROM [Location]
WHERE VehicleID = V.VehicleID) AS Locations
FROM [Vehicle] V
これにより、2番目のパラメーターとして別のセパレーターを指定できるようになり、前者の方法よりも少し柔軟性が高まります。