任何人都可以帮助我使这个查询适用于sql server 2014.这适用于Postgresql,可能在sql server 2017上。在Oracle上它是listagg而不是string_agg。
这是sql:
select
string_agg(t.id,',') AS id
from Tabel t
我在网站上检查了一些xml选项应该被使用但我无法理解。
答案 0 :(得分:9)
在2017年之前的SQL Server中,您可以执行以下操作:
select stuff( (select ',' + cast(t.id as varchar(max))
from tabel t
for xml path ('')
), 1, 1, ''
);
stuff()
的唯一目的是删除初始逗号。这项工作由for xml path
完成。
答案 1 :(得分:1)
请注意,对于某些字符,使用FOR XML PATH
时这些值将被转义,例如:
SELECT STUFF((SELECT ',' + V.String
FROM (VALUES('7 > 5'),('Salt & pepper'),('2
lines'))V(String)
FOR XML PATH('')),1,1,'');
这将返回以下字符串:
7 > 5,Salt & pepper,2
lines'
这不太可能实现。您可以使用TYPE
解决这个问题,然后获取XML的值:
SELECT STUFF((SELECT ',' + V.String
FROM (VALUES('7 > 5'),('Salt & pepper'),('2
lines'))V(String)
FOR XML PATH(''),TYPE).value('(./text())[1]','varchar(MAX)'),1,1,'');
这将返回以下字符串:
7 > 5,Salt & pepper,2
lines