您好我正在尝试将列中多行的值连接到单个列。我可以使用 FOR XML PATH('')来实现它。但是在sql server中连接是否有任何替代解决方案。
StudentName
-------------
Mary
John
Sam
,预期输出应该像
StudentName
-------------
Mary, John, Sam
通过使用这个我可以实现
select Name + ', ' AS 'data()' from NAMES FOR XML PATH('')
但是没有使用 XML PATH('')还有其他选择..?
答案 0 :(得分:1)
您可以使用递归CTE连接名称:
with s as (
select s.*, row_number() over (order by studentname) as seqnum
from students
),
cte as (
select studentName as names, seqnum
from s
where seqnum = 1
union all
select cte.names + ',' + s.studentName
from cte join
s
on s.seqnum = cte.seqnum + 1
)
select top 1 cte.names
from cte
order by seqnum desc;
答案 1 :(得分:1)
我不会正常提出一个解决方案(我更喜欢XML PATH解决方案):
DECLARE @Result VARCHAR(MAX)='';
SELECT @Result = @Result + ',' + Name
FROM NAMES;
SELECT SUBSTRING(@Result,2,10000)