Вам нужно сделать так:
Так что, в основном, вам не хватает a, где t.Enroll_no = s.Enroll_no, а затем
сгруппировать по вашему запросу
declare @table table (enroll nvarchar(50),periodname int)
insert into @table
values
('YYYYYYYYY' , 1),
('YYYYYYYYY' , 2),
('XXXXXXXXXX', 6),
('XXXXXXXXXX',1 ),
('XXXXXXXXXX',7 )
select enroll, PeriodList = stuff((select N', '+cast(PeriodName as nvarchar(2)) from @table t2 where t.enroll = t2.enroll order by periodname
FOR XML PATH (N''),TYPE).value(N' .[1]', N'nvarchar(max)'),1,2,N'') from @table t
group by enroll
Обновление на основе комментариев владельцев тем
Вы можете создать представление:
Create view dbo.EnrollmentPeriodList as
SELECT
S.enroll_no,
Pm.periodname
FROM
studentattendencedetails AS SA
LEFT JOIN
studentattendencemaster AS SM ON SA.attendencemasterid = SM.id
LEFT JOIN
tbl_periodmaster AS Pm ON SA.periodid = Pm.id
LEFT JOIN
students AS S ON SA.studentid = S.id
WHERE
SA.isabsent = 2
AND s.enroll_no IN ('YYYYYYYYY','XXXXXXXXXX')
А потом код
select enroll, PeriodList = stuff((select N', '+cast(PeriodName as nvarchar(2)) from dbo.EnrollmentPeriodList t2 where t.enroll = t2.enroll order by periodname
FOR XML PATH (N''),TYPE).value(N' .[1]', N'nvarchar(max)'),1,2,N'') from dbo.EnrollmentPeriodList t
group by enroll