繁体   English   中英

在T-SQL中将多个行字段串联为一列

[英]Concatenating multiple rows fields into one column in T-SQL

我正在编写一个SQL查询,其中需要对表执行子选择,该表通常将返回多行。 我需要能够将所有行中某个字段的结果连接到一个字段中以进行输出。 这有可能,怎么样?

例如,如果SQL查询返回

id | field
1  | test1
2  | test2
3  | test3

我需要输出的字段是“ test1 test2 test3”。 谢谢

这是for xml技巧:

    SELECT  field + ' ' as [text()]
    FROM    YourTable
    FOR XML PATH ('')

打印:

test1 test2 test3

它通常与outer apply一起使用,以对每行执行一次。

declare @sample table(id int, field varchar(20))
insert into @sample values(1,'test1')
insert into @sample values(2,'test2')
insert into @sample values(3,'test3')
declare @result varchar(max) set @result = ''
select @result = @result + ' '+field from @sample
select @result

SQLCLR自定义聚合器将是替代的(更好的阅读方式)解决方案

作为现有答案的补充。 尝试在要使用的列名中包括COALESCE表达式。 这样可以避免在串联字符串中包含空值,并避免列表看起来像这样。 注意冗余的空格。

field1 field2   field4 field

可以在此处找到更多详细信息。

GO

DECLARE @tableName VARCHAR(MAX)
SELECT  @tableName = COALESCE(@tableName + ' ' ,'') + Name
FROM    sys.tables
SELECT  @tableName

GO

尝试这个:

SELECT RTRIM(field)
  FROM (
                SELECT field + ' ' field
                    FROM <YOUR_TABLE>
                    FOR XML PATH('')
             ) a

可以用光标做。

declare @field nvarchar(max)
declare @concat nvarchar(max)
set @concat = ''
declare @cursor cursor
set @cursor = cursor for select field from table
open @cursor
fetch next from @cursor into @field
while @@fetch_status = 0
begin
  set @concat = concat(@concat,@field)
  fetch next from @cursor into @field
end

您的工作是在连接的字符串之间添加空格:-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM