I want to "concatenate" all the "Text"-rows into one single row and get one row as a result. Is this even possible? I use MSSQL Server 2005.
A:
I believe you're looking for something like this:
DECLARE @string nvarchar(max)
SET @string = N''
SELECT @string = @string + [Text] + N' ' FROM [YourTable]
SELECT @string
This will concatenate all of the values for the [Text] column into a single variable. You can then select the variable to retrieve all of the values in a single row.
John Bledsoe
2010-10-04 14:41:32
A:
Something like:
DECLARE @result varchar(max)
SELECT @result = COALESCE(@result + ' ','') +[Text] FROM [Table]
SELECT @result
Fermin
2010-10-04 14:42:19
+2
A:
Use FOR XML PATH:
SELECT [Text]+' ' AS 'text()' FROM _table FOR XML PATH('')
Another option - use string concatenation:
DECLARE @s nvarchar(max)
SELECT @s = ISNULL(@s, '') + t + ' ' FROM _table OPTION (MAXDOP 1)
SELECT @s
Please note that the latter one isn't guaranteed to work, afaik, officially the behaviour of "@s = @s + ..." for multi-row resultset is undefined.
MAXDOP 1
hint is used here to prevent the optimizer from creating a parralel execution plan, as this will yield an incorrect result for sure.
VladV
2010-10-04 14:45:09
Works great, thanks!
Fu86
2010-10-04 14:56:58
+1 for the `FOR XML PATH` workaround, great idea!
Shimmy
2010-10-25 22:47:58