Создайте таблицу чисел и заполните ее большим количеством чисел, чем вам нужно.Затем вы можете использовать запрос на основе набора для получения результатов
Create table #temp (product varchar(15), id int)
insert into #temp
values ('test', 1), ('test', 3),('test', 4),('test2', 6),('test2', 2),('test2', 10),('test3', 10),('test3', 9),('test3',7),('test4', 1),('test4', 2),('test4', 3)
create table #product (product varchar (15))
insert into #product
values ('test'),('test2'),('test3'),('test4'), ('test5')
create table #num (number int)
insert into #num
values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15)
select n.number,p.product from #num n
cross join #product p
left join (
select product, max(id)as maxid from #temp group by product)a
on a.product = p.product
left join #temp t on n.number = t.id and t.product = p.product
where n.number <=a.maxid and t.id is null
order by p.product