我目前有一个包含计算列规范的TotalHours列,其中包含以下内容
(isnull(datediff(minute,[RegIn],[RegOut]),(0))/(60.0))
这给了我2个regin和regout之间的总小时数。
现在。我计划从计算小时数超过6.5小时的总小时数中减去30分钟。
我尝试用case语句来做。但迷路了。
感谢任何帮助或指示
感谢。
答案 0 :(得分:2)
这是一种方式:
coalesce((datediff(minute,[RegIn],[RegOut])/60.0 -
(case when datediff(minute,[RegIn],[RegOut]) > 6.5*60 then 0.5 else 0 end),
0)
答案 1 :(得分: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