这是我的样本数据。我想将学生分批到按学校分区的最大批次大小 100。 每个老师可以带12个学生。 我想制作最多 100 名学生的批次,因为任何老师的学生都不会分成不同的批次。
create table #school (
Name varchar(10),
TeacherName varchar(10),
StudentName varchar(10))
DECLARE @BatchSize int = 100 --Always bigger than total number of students per teacher
SELECT Name, TeacherName,
SUM(COUNT(*)) OVER(PARTITION BY Name ORDER BY TeacherName)/@BatchSize+1 as BatchNumber
FROM #school
GROUP BY Name, TeacherName
通过上述第二批查询,学生人数超过100人。 如何保证学生不被分成不同批次且每批次学生不超过100人
如果你声明批量大小总是大于任何
School + Teacher
设置,那么这个批量大小就变得毫无意义,因为没有老师会超过它,不是吗?
这会给你结果:
select distinct s.Name, s.TeacherName,
dense_rank() over(partition by s.Name order by s.TeacherName) as [BatchNumber]
from #school s;
(不知道为什么你从问题中删除了示例数据和预期输出。这当然不会使它更容易理解。)