2

我目前有一列 TotalHours 包含一个计算列规范,其中包含以下内容

(isnull(datediff(minute,[RegIn],[RegOut]),(0))/(60.0))

这给了我 2 列 regin 和 regout 之间的总小时数。

现在。当计算的小时数超过 6.5 小时时,我试图从总小时数中减去 30 分钟。

我试着用case语句来做。但迷路了。

感谢任何帮助或指示

谢谢。

4

2 回答 2

2

这是一种方法:

coalesce((datediff(minute,[RegIn],[RegOut])/60.0 -
          (case when datediff(minute,[RegIn],[RegOut]) > 6.5*60 then 0.5 else 0 end),
         0)
于 2013-01-07T14:39:20.517 回答
2

由于您有一个复杂的值表达式,因此您必须多次使用该表达式。一种思考方法是用占位符替换复杂的表达式,例如TotalHours,然后在弄清楚逻辑后将表达式放回原处。

TotalHours - 
    Case When TotalHours > 6.5 Then 0.5 Else 0 End

这表示当总小时数大于 6.5 小时时,总小时数应减少 0.5(30 分钟)的值。以上述方式编写它可以减少 TotalHours 的重复次数。现在将原始的复杂表达式重新插入:

(isnull(datediff(minute,[RegIn],[RegOut]),(0))/(60.0)) -
    Case When (isnull(datediff(minute,[RegIn],[RegOut]),(0))/(60.0)) > 6.5
        Then 0.5 Else 0 End
于 2013-01-07T14:41:04.430 回答