如何在没有xml路径的情况下将列的多个行值连接到sql中的单个列

时间:2016-10-07 10:34:40

标签: sql-server xml

您好我正在尝试将列中多行的值连接到单个列。我可以使用 FOR XML PATH('')来实现它。但是在sql server中连接是否有任何替代解决方案。

StudentName
-------------
Mary
John
Sam

,预期输出应该像

StudentName
-------------
Mary, John, Sam

通过使用这个我可以实现

select Name + ', ' AS 'data()'  from NAMES FOR XML PATH('')

但是没有使用 XML PATH('')还有其他选择..?

2 个答案:

答案 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)