Ваш вопрос не очень понятен, однако вы можете использовать пару CTE для подготовки ваших данных, а затем STRING_AGG
(начиная с SQL Server 2017) для объединения значений:
declare @tmp table(
Ent varchar(2),
Loc varchar(1),
Pdate date,
Sdate date,
Ent1 varchar(2),
Loc1 varchar(1),
No varchar(max)
)
insert into @tmp values
('01', 'A', '2018-09-02', '2018-09-20', 'A1', 'B', 'S01')
,('01', 'A', '2018-09-01', '2018-09-20', 'A1', 'B', 'S02')
,('01', 'A', '2018-09-03', '2018-09-20', 'A1', 'C', 'S02')
,('01', 'A', '2018-09-01', '2018-09-20', 'A1', 'C', 'S02')
,('01', 'A', '2018-09-01', '2018-09-20', 'A1', 'D', 'S02')
,('01', 'A', '2018-09-03', '2018-09-20', 'A1', 'D', 'S02')
;with
A as(
select ent, loc, ent1, loc1, no
from @tmp
group by ent, loc, ent1, loc1, no
)
,B as(
select ent, loc, ent1, loc1, STRING_AGG(No, ',') as No
from A
group by ent, loc, ent1, loc1
)
select T.Ent, T.Loc, T.Pdate, T.Sdate, T.Ent1, T.Loc1, B.No
from @tmp T
inner join B
on T.Ent = B.Ent and T.Loc = B.Loc and T.Ent1 = B.Ent1 and T.Loc1 = B.Loc1
Результат:
Если вы используете SQL Server <2017, вы не сможете использовать <code>STRING_AGG, и вам придется написать собственную логику агрегирования строк.