问题描述
基本上,我正在尝试根据轮班和输入的天数来计算用户可以拥有的总时数。
示例: 从2020年9月13日开始轮班。我知道这是第1周,星期日(根据其他计算)。 因此,我需要从周日开始取2,然后从ROTA表的第二周开始取3、2、1、1、1、2。
总共7天: 第1周=周日 第2周=周一,周二,周三,周四,周五,周六
ROTA table
+------+-----+-----+-----+-----+-----+-----+-----+
| WEEK | MON | TUE | WED | THU | FRI | SAT | SUN |
+------+-----+-----+-----+-----+-----+-----+-----+
| 1 | 2 | 2 | 2 | 2 | 2 | 2 | 2 |
| 2 | 3 | 2 | 1 | 1 | 1 | 2 | 1 |
| 3 | 1 | 2 | 1 | 1 | 1 | 1 | 1 |
| 4 | 1 | 1 | 1 | 1 | 2 | 1 | 1 |
| 5 | 1 | 1 | 2 | 1 | 1 | 1 | 1 |
+------+-----+-----+-----+-----+-----+-----+-----+
以上数字存储在Shifts表中。因此,对于我的7天,这7天的总工作时间为2、3、2、1、1、1、2 = 51.5。
SHIFTS Table
+-------+-------+
| SHIFT | HOURS |
+-------+-------+
| 1 | 8.5 |
| 2 | 6 |
| 3 | 8 |
+-------+-------+
我正在执行WHILE循环以获取所需的Week和列。因此,对于上面的示例,我只需要ROTA表中的SUN列。下一个循环将给我MON-SAT。
起初,我试图将两行合并在一起,然后可以进行某种计数。因此,有3倍SHIFT 2、1倍SHIFT 3和3倍SHIFT1。然后我可以得到总时数,但不确定如何执行。
查询完成后,我将显示以下两行:
LOOP 1:
+-----+
| SUN |
+-----+
| 2 |
+-----+
LOOP 2:
+-----+-----+-----+-----+-----+-----+
| MON | TUE | WED | THU | FRI | SAT |
+-----+-----+-----+-----+-----+-----+
| 3 | 2 | 1 | 1 | 1 | 2 |
+-----+-----+-----+-----+-----+-----+
我已经将查询剥离了相当一部分,但这是要点:
WHILE @cnt <= @totalDays
BEGIN
IF @dayOfWeek = 1 SET @columnList = 'SUN' ELSE
IF @tempTotalDays >= 7 SET @columnList = 'MON,TUE,WED,THU,FRI,SAT,SUN' ELSE
IF @tempTotalDays = 6 SET @columnList = 'MON,SAT' ELSE
IF @tempTotalDays = 5 SET @columnList = 'MON,FRI' ELSE
IF @tempTotalDays = 4 SET @columnList = 'MON,THU' ELSE
IF @tempTotalDays = 3 SET @columnList = 'MON,WED' ELSE
IF @tempTotalDays = 2 SET @columnList = 'MON,TUE' ELSE
IF @tempTotalDays = 1 SET @columnList = 'MON'
SET @sqlCommand = 'select '+ @columnList +' from dbo.ROTA
where WEEK = @rotaWeek'
EXEC sp_executesql @sqlCommand,N'@rotaWeek nvarchar(75),@rotaWeek = @rotaWeek
END;
GO
您可以看到我快到了。我只是不知道如何获取结果并从“ SHIFTS”表中选择小时数。任何帮助将不胜感激。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)