I’ve come across a few solutions to creating comma-delimited lists in SQL Server. The two most common solutions include CURSORS/WHILE loops and COALESCE. CURSORS and WHILE loops are a performance drag so I won’t even go there. COALESCE can work but the function requires variable declarations and function encapsulation if you want to return more than one record with delimited results without looping. The approach I prefer is FOR XML PATH. Below is an example using the AdventureWorks database. I show a comma-delimited list of address types for 3 customers.
SELECT customer.[CustomerID] ,customer.[FirstName] ,customer.[LastName] ,SUBSTRING(( SELECT ', ' + customer_address.AddressType FROM [SalesLT].[CustomerAddress] AS customer_address WHERE customer_address.CustomerID = customer.CustomerID FOR XML PATH('')), 3, 200000) AS AddressTypes FROM [SalesLT].[Customer] AS customer WHERE customer.CustomerID IN (29544,29545,29559);