2013-01-07 119 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)