原数据,可以填报,后期数据会变动,新增或减少
想实现的功能,比如厂级有6条数据,就六天一循环,电工有4条数据,就四天一循环,后期数据源变化,循环天数也跟着变化
原数据,可以填报,后期数据会变动,新增或减少
sqlserver 可以用下列方法
with t as ( -- 原始数据
select 1 as id,'aaa' name,'A' job
union all select 2,'aba','A'
union all select 3,'xxz','A'
union all select 4,'fee','B'
union all select 5,'3fee','B'
union all select 6,'f5ee','B'
union all select 7,'f4ee','B'
union all select 8,'fe8e','B'
union all select 9,'fe0e','B'
union all select 16,'tte','Bc'
union all select 17,'xtxt','Bc'
union all select 18,'uyuy','Bc'
union all select 19,'zzz','Bc'
),t1 as ( -- 按job划分每个人需要的值班序号
select *,row_number() over(partition by job order by id) wid from t
),t2 as ( -- 获得每个班有多少人进行轮班
select job,max(wid) nums from t1 group by job
)
select * -- 最后按照班列出今天需要排班的人
from (
select name,a.job
from t1 a
left join t2 b on a.job=b.job
-- 获得自2023年3月1日开始排版后,今天需要排班的人员
where datediff(d,'2023-3-1',getdate()) % nums = wid - 1
) a
pivot(max(name) for job in (A,B,Bc)) p -- 这里需要把所有的班名都列出