根据结果​​从WHILE循环的另一个表中选择

问题描述

基本上,我正在尝试根据轮班和输入的天数来计算用户可以拥有的总时数。

示例: 从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 (将#修改为@)