2016-12-06 2 views
1
declare @t table 
(
    year int, 
    month int, 
    SomeName varchar(100) 
) 

insert into @t 
select 2015, 1, 'Ashok' 
union 
select 2015, 2, 'Ram' 
union 
select 2015, 3, 'Ashok' 
union 
select 2016, 1, 'Raj' 
union 
select 2016, 2, 'Raj' 

select * from @t 

приведенный выше выбор возвращает мне следующее.как получить группу кумулятивным concat для строковых значений в SQL

year month SomeName 
2015 1  Ashok 
2015 2  Ram 
2015 3  Ashok 
2016 1  Raj 
2016 2  Raj 

Как я получаю следующий ..

year month name CumSrome 
2015 1  Ashok Ashok 
2015 2  Ram  Ashok,Ram 
2015 3  Ashok Ashok,Ram 
2016 1  Raj  Raj 
2016 2  Raj  Raj 

ТИА

+0

Вы говорите о * кумулятивный * ... Является ли это сгруппированы по годам? Почему «Радж» один? – Shnugo

+0

Объясните, как вы достигли желаемого результата – GuidoG

ответ

4

Попробуйте так:

declare @t table 
(
    year int, month int, 
    SomeName varchar(100) 
); 

insert into @t 
select 2015, 1, 'Ashok' 
union all 
select 2015, 2, 'Ram' 
union all 
select 2015, 3, 'Ashok' 
union all 
select 2016, 1, 'Raj' 
union all 
select 2016, 2, 'Raj'; 

SELECT t.* 
     ,CumumlativeConcatPerYear.Names 
FROM @t AS t 
CROSS APPLY 
(
    SELECT STUFF(
    (
     SELECT DISTINCT ', ' + SomeName 
     FROM @t AS x 
     WHERE x.year=t.year AND x.month<=t.month 
     FOR XML PATH('') 
    ),1,2,'') 
) AS CumumlativeConcatPerYear(Names) 
0

Используйте команду STUFF в сочетании с FOR XML PATH команды для соедините цепочку вместе.

https://sqlwhisper.wordpress.com/2013/03/24/stuff-and-for-xml-path-for-string-concatenation/

+0

Это должен быть комментарий, а не ответ. Да, это полезно, но это помогает OP найти и ответить и не отвечает сам по себе – GuidoG

+0

Извините, я только отправлял сообщения в течение 9 дней, но им еще многое предстоит узнать о том, как работает этот сайт. – pacreely

Смежные вопросы