如何在最大批量大小限制下划分成一批记录

问题描述 投票:0回答:1

这是我的样本数据。我想将学生分批到按学校分区的最大批次大小 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人

sql sql-server partitioning cumulative-sum sql-server-2022
1个回答
0
投票

如果你声明批量大小总是大于任何

School + Teacher
设置,那么这个批量大小就变得毫无意义,因为没有老师会超过它,不是吗?

这会给你结果:

select distinct s.Name, s.TeacherName,
    dense_rank() over(partition by s.Name order by s.TeacherName) as [BatchNumber]
from #school s;

(不知道为什么你从问题中删除了示例数据和预期输出。这当然不会使它更容易理解。)

© www.soinside.com 2019 - 2024. All rights reserved.