views:

62

answers:

2

Is there a way in SQL sever that can write the output as follow:

select events
  from mytable

original output

events
--------
123456
894531
985233
829292
920202
392939
299223

desired output

'123456', '894531','985233','829292','920202','392939','299223'

select '' + CustomerID + ',' from dbo.Customers customerid ALFKI, ANATR, ANTON, AROUT, BERGS,

Would like to see the result as customerid 'ALFKI', 'ANATR', 'ANTON', 'AROUT', 'BERGS', so on...

+5  A: 
SELECT
  STUFF(
    (SELECT
      ', ' + events
     FROM dbo.mytable
     FOR XML PATH('')
    ), 1, 1, '') As concatenated_string

If you want the values enclosed in single quotes then edit the padding above.

Mitch Wheat
+1: This is SQL Server 2005+
OMG Ponies
@OMG: good point
Mitch Wheat
The third argument to the STUFF function should be 2, not 1. Small point, but otherwise there is a leading space.
Bradley Smith
Just ran the query. It does work! but the result does not show the single quotation as wanted. not sure why. Many thanks!
Chris
Am I the only one who's been seeing this type of *same* questions and answers over and over?
Sung Meister
@SungMaister: The thing is this is quite common thing to do in SQL but there's no implicit support for it (as is in MySql for instance). No wonder so many people ask this question over and over...
Robert Koritnik
+3  A: 

Concatenating Row Values in Transact-SQL discusses the various options you have, like recursive CTE, blackbox XML (like Mitch' solution), CLR, cursors, recursive scalar UDFs etc etc, as well as some unreliable but fast approaches (SELECT with variable concatenation).

Remus Rusanu