Вот код, работающий над таблицей varaibale, которую я назвал @ Students
Пожалуйста, замените его на свой собственный стол
Я заполнил эту таблицу некоторыми данными и проверил различные случаи (количество записей меньше 7 или больше 7, и работал, как вы хотите!)
1) Сначала создайте таблицу переменных с именем @mytable, которая будет заполнена n записями
n будет равно 7, если количество записей в таблице ваших учеников равно или меньше 7
n будет количеством записей в таблице учеников, если оно больше 7
2) Затем выполните правое внешнее соединение между таблицей ученика, к которой вы добавляете номер записи с помощью функции CTE, row_number ().

declare @students as table(id int identity(1,1),firstname nvarchar(50))
insert into @students(firstname) values
('Ali ben Hassine'),
('Mohamed el Aabed'),
('Ali ben Hassine'),
('Mohamed el Aabed'),
('Mohamed el Aabed'),
('Tahar Harbi'),
('Hassine Ayari'),
('Ihsen Trabelsi'),
('Marwa Mostari'),
('Mourad Zmerli'),
('Hafedh Gabsi'),
('Miloud Filali');
declare @mytab as table(n int)
declare @n as int
select @n=count(distinct(firstname)) from @students
if @n<7 set @n=7
declare @i as int
set @i=1
while @i <@n+1
begin
insert into @mytab values(@i)
set @i=@i+1
end;
with cte as
(select row_number() over(partition by 1 order by firstname) r#,firstname,count(1) Total from @students group by firstname)
select isnull(cte.firstname,'Dummy') firstanme,isnull(cte.total,2) Total from cte
right outer join @mytab t2 on cte.r#=t2.n
[![enter image description here][1]][1]