我正在使用SQL Server 2005,并希望找到一种更简单的方法将多行连接成1个字符串。
PK Column1, Column2
-- ------- -------
PK1 apple orange
PK1 pear banana
PK1 honey
PK2 apple2 orange2
PK2 pear2 banana2
PK2 honey2
结果:
PK1, apple orange pear banana honey
PK2, apple2 orange2 pear2 banana2 honey2
使用COALESCE
非常容易,但它在SQL Server 2005中不可用。我尝试使用XML Path,但它会在最后添加其他字符。
答案 0 :(得分:1)
更简单的解决方案是使用XML PATH
SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(a.Column1)
FROM dbo.mytbl AS a WHERE a.ColumnX = somecondition
FOR XML PATH ( '' ) , TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
SELECT @cols
当然WHERE子句在您的情况下是可选的。如果没有勺子喂你,将它们应用到你的另一列并连接它们。瞧!
答案 1 :(得分:0)
这将捕获空值或空值
Declare @YourTable table (PK int,Column1 varchar(25), Column2 varchar(25))
Insert Into @YourTable values
(1,'apple','orange'),
(1,'pear','banana'),
(1,'honey', null),
(2,'apple2','orange2'),
(2,'pear2','banana2'),
(2,'honey2', null)
Select PK
,DelimString = Stuff((Select case when Column1 is null or Column1='' then '' else ' ' + replace(Column1,char(13),'') end
+case when Column2 is null or Column2='' then '' else ' ' + replace(Column2,char(13),'') end
From @YourTable
Where PK=A.PK
For XML Path('')), 1, 1, '')
From @YourTable A
Group By PK
返回
PK DelimString
1 apple orange pear banana honey
2 apple2 orange2 pear2 banana2 honey2
答案 2 :(得分:0)
如果您的数据是' '
结果中的某些空格for xml path
,您最后会看到 
'  '
:
select ' ' for xml path ('');
在您的情况下,我可以使用此查询:
select t.PK,
ltrim(rtrim(replace(
(select ' ' + isnull(ti.Column1, '') + ' ' + isnull(ti.Column2, '')
from yourTable ti
where ti.PK = t.PK
for xml path (''))
, ' ', ''))) fruits
from yourTable t
group by t.PK;