2013-01-07 120 views
2

我现在有包含具有以下减去30分钟

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

计算列规范这使我2个栏REGIN,和REGOUT之间的总小时数的列TotalHours。

现在。我试图从计算小时数高于6.5小时的总小时数中减去30分钟。

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

感谢任何帮助或指点

谢谢。

回答

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 
2

这里有一种方法:

coalesce((datediff(minute,[RegIn],[RegOut])/60.0 - 
      (case when datediff(minute,[RegIn],[RegOut]) > 6.5*60 then 0.5 else 0 end), 
     0)