Jeśli używasz SQL Server 2005, możesz użyć polecenia FOR XML PATH.
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]
Jest to o wiele łatwiejsze niż używanie kursora i wydaje się, że działa całkiem nieźle.
Aktualizacja
Dla każdego, kto nadal używa tej metody z nowszymi wersjami SQL Server, istnieje inny sposób na zrobienie tego, który jest nieco łatwiejszy i bardziej wydajny przy użyciu STRING_AGG
metoda dostępna od SQL Server 2017.
SELECT [VehicleID]
,[Name]
,(SELECT STRING_AGG([City], ', ')
FROM [Location]
WHERE VehicleID = V.VehicleID) AS Locations
FROM [Vehicle] V
Pozwala to również na określenie innego separatora jako drugiego parametru, zapewniając nieco większą elastyczność w porównaniu z poprzednią metodą.