将表列合并为单个字符串(不含UDF)

时间:2018-05-04 02:33:50

标签: sql sql-server string tsql concatenation

我正在尝试将多个记录中的字段组合成SQL Server或T-SQL中的单个字符串

  

例如 ,我有:

 ID   myString
 1    This
 2    is
 3    a
 4    test!
     

... 我需要 This is a test!

我可以使用LAG组合两个记录(见下文),我怀疑解决方案中有WHILE(可能是this RedGate post的变体) ,但我不确定如何继续。

create table #temp (id int, myString varchar(max));
  insert into #temp values (1,'This');
  insert into #temp values (2,'is');
  insert into #temp values (3,'a');
  insert into #temp values (4,'test!');

select 
  myString,
  LAG(myString) OVER (ORDER BY id) + ' ' + myString as [myTwoFields]
from #temp

...返回:

ID   myString   myTwoFields  
 1     This
 2     is        This is
 3     a         is a
 4     test!     a test!

不幸的是,我无法在此服务器上创建UDF 。因此,SE Data Explorer是测试的代表性地点:

  

请参阅SEDE上的this query,或者 click here to fork it 进行测试。

思考?谢谢!

1 个答案:

答案 0 :(得分:3)

示例

Select NewStr = Stuff((Select ' ' +MyString From #temp Order by ID For XML Path ('')),1,1,'') 

<强>返回

NewStr
This is a test!

另一个选项

Declare @S varchar(max) = ''
Select @S = ltrim(@S+' '+MyString)
 From  #Temp
 Order by ID

Select @S

<强>返回

This is a test!