Как объединить значения нескольких строк столбца в один столбец в sql без xml-пути

#sql-server #xml

#sql-сервер #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 («) есть ли какие-либо альтернативы ..?

Комментарии:

1. Не совсем; если бы был простой способ, никто бы не рекомендовал for xml path .

2. @GordonLinoff Спасибо за информацию . Но дело в том, что я пытаюсь выполнить запрос в другой инструмент, который поддерживает sql-запросы, он не принимает XML PATH

3. Сколько имен у вас есть?

4. около 20-30

5. Что входит в другой инструмент ?

Ответ №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;
  

Ответ №2:

Одно решение, которое я бы не советовал обычно (я бы предпочел решение XML PATH):

 DECLARE @Result VARCHAR(MAX)='';
SELECT @Result = @Result   ','   Name
FROM NAMES;

SELECT SUBSTRING(@Result,2,10000)