Nếu bạn đang sử dụng SQL Server 2005, bạn có thể sử dụng lệnh 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]
Nó dễ dàng hơn nhiều so với sử dụng con trỏ và có vẻ hoạt động khá tốt.
Cập nhật
Đối với bất kỳ ai vẫn sử dụng phương pháp này với các phiên bản SQL Server mới hơn, có một cách thực hiện khác dễ dàng hơn và hiệu quả hơn một chút bằng cách sử dụng STRING_AGG
đã có từ SQL Server 2017.
SELECT [VehicleID]
,[Name]
,(SELECT STRING_AGG([City], ', ')
FROM [Location]
WHERE VehicleID = V.VehicleID) AS Locations
FROM [Vehicle] V
Điều này cũng cho phép một dấu phân tách khác được chỉ định làm tham số thứ hai, mang lại sự linh hoạt hơn một chút so với phương pháp cũ.