将许多行分组并连接到一个

时间:2010-10-04 14:33:50

标签: sql sql-server sql-server-group-concat

我希望将所有“文本” - “连接”成一行,然后得到一行。这甚至可能吗?我使用MSSQL Server 2005。

query

3 个答案:

答案 0 :(得分:2)

我相信你正在寻找这样的东西:

DECLARE @string nvarchar(max)
SET @string = N''

SELECT @string = @string + [Text] + N' ' FROM [YourTable]

SELECT @string

这会将[Text]列的所有值连接成一个变量。然后,您可以选择该变量以检索单行中的所有值。

答案 1 :(得分:2)

使用FOR XML PATH:

SELECT [Text]+' ' AS 'text()' FROM _table FOR XML PATH('')

另一个选项 - 使用字符串连接:

DECLARE @s nvarchar(max)
SELECT @s = ISNULL(@s, '') + t + ' '  FROM _table OPTION (MAXDOP 1)
SELECT @s

请注意,后者不能保证工作,afaik,正式表示多行结果集“@s = @s + ...”的行为未定义。
此处使用MAXDOP 1提示来阻止优化器创建parralel执行计划,因为这肯定会产生不正确的结果。

答案 2 :(得分:0)

类似的东西:

DECLARE @result varchar(max)

SELECT @result = COALESCE(@result + ' ','') +[Text] FROM [Table]
SELECT @result