#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)