w2834098992 2023-03-27 08:57 采纳率: 50%
浏览 52
已结题

sql 数据库 数据循环展示 ,并根据时间参数筛选

原数据,可以填报,后期数据会变动,新增或减少

img


想实现的功能,比如厂级有6条数据,就六天一循环,电工有4条数据,就四天一循环,后期数据源变化,循环天数也跟着变化

img

  • 写回答

3条回答 默认 最新

  • 文盲老顾 WEB应用领新星创作者 2023-03-27 09:50
    关注

    sqlserver 可以用下列方法

    img

    
    
    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 -- 这里需要把所有的班名都列出
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月4日
  • 已采纳回答 3月27日
  • 创建了问题 3月27日

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?