Sometimes, you will encounter situations where you will need to format your results as comma separated values.
In SQL Server 2000, you can use a loop or a cursor, or you can keep in simple by using a variable that keeps on concatenating the column values. Two ways to do it follow:
   1:
2: -- method 1
3: -- complicated/more cryptic way of getting comma separated values
4: -- would not recommend this; shown just for comparison purposes
5: USE AdventureWorksLT
6: GO
7: DECLARE @LastName VARCHAR(100)
8: DECLARE @LastNames VARCHAR(MAX)
9: SET @LastNames = ''
  10:
11: DECLARE LastNameCursor CURSOR SCROLL STATIC READ_ONLY FOR
12: SELECT LastName
13: FROM SalesLT.Customer
  14:
15: OPEN LastNameCursor
  16:
17: FETCH NEXT FROM LastNameCursor
18: INTO @LastName
19: WHILE (@@FETCH_STATUS = 0) BEGIN
  20:
21: SET @LastNames = @LastNames + @LastName + ', '
  22:
23: FETCH NEXT FROM LastNameCursor
24: INTO @LastName
25: END
  26:
27: -- display
28: SELECT SUBSTRING(@LastNames, 1, DATALENGTH(@LastNames) - 2)
  29:
30: CLOSE LastNameCursor
31: DEALLOCATE LastNameCursor
1: -- method 2
2: -- better way, less cryptic
3: USE AdventureWorksLT
4: GO
5: DECLARE @LastNames VARCHAR(MAX)
6: SET @LastNames = ''
7: SELECT
8: @LastNames = @LastNames + ', ' + LastName
9: FROM
  10:     SalesLT.Customer
  11:
12: -- display; remove the trailing comma and space
13: SELECT RIGHT(@LastNames, LEN(@LastNames) - 2)
In SQL Server 2005/2008, an additional alternative way is born that can be used to get the comma separated values – by using FOR XML PATH.
   1:
2: -- method 3
3: -- this gets all last names separated by commas
4: -- issue is there is an extra comma and space after the last value
5: USE AdventureWorksLT
6: GO
7: SELECT
8: CAST
   9:     (
  10:         (
11: SELECT LastName + ', '
12: FROM SalesLT.Customer
13: FOR XML PATH ('')
  14:         )
15: AS VARCHAR(MAX)
  16: )
  17:
18: -- alternative way, still using FOR XML PATH, is to use the LEFT Transact-SQL string function
19: -- in the example below, I'll use a variable to temporarily store the string
20: -- otherwise the query will need a subquery, and it will be a little cryptic to read
21: DECLARE @LastNames VARCHAR(MAX)
22: SELECT
  23:     @LastNames =
24: CAST
  25:         (
  26:             (
27: SELECT LastName + ', '
28: FROM SalesLT.Customer
29: FOR XML PATH ('')
  30:             )
31: AS VARCHAR(MAX)
  32:         )
33: SELECT
34: LEFT(@LastNames, LEN(@LastNames) - 2)
Filed under:
          DBA Toolbox / T-SQL Scripts, T-SQL Tips and Tricks        
      

 
		  
 
 
 
   
   
  
   
   
 
  
Good One, exactly what i am looking for, thank you Belle
Succinct and helpful. Thanks!
thanks exactly what iam looking
Very neatly given 3 methods to achieve the same and also conveyed which one is the best