2017-08-17 34 views
0

我有這種情況,我需要計算給定的4周時間內員工的總合同工時數。僱員可以改變小時中旬期間,因此總承包小時就需要根據當時間改變SQL Server - 月的總小時數

調整

我的SQL是

declare @start datetime = '2017-06-20' 
declare @end datetime = '2017-07-20' 

select j.EMPLOY_REF, 
j.ACT_HOURS * 4 as ContractedHoursPer4WeekPeriod, 
j.ACT_HOURS as ContractedHoursPerWeek, 
(j.ACT_HOURS/7) as ContractedHoursPerDay, 
j.COSTCENTRE, 
j.FROMDATE, 
j.UNTILDATE 

from jobholdr j 

where EMPLOY_REF ='000033504' 

,其結果是

enter image description here

如果從2017年6月20日到2017年7月20日的這個例子中,這段時間應該有10天,每週39小時,然後每週30小時20天。

這是如何計算的,以給出期間總合同小時數的一個結果,因爲該期間的合同小時數有差異。我猜測它需要被分解爲天之內完成,但我不知道下一步去哪裏...

+1

編輯你的問題,並顯示用於生成結果的數據。 –

+0

我在您的查詢中看不到「@ start」和「@ end」 –

+1

「我猜測它需要通過將其分解爲幾天來完成」。好主意。你需要一個整數計數表來列舉'@ start'和'@ end'之間的天數,並將這一天加入正確的行每星期每週收聽。 – Serg

回答

0

您可以在您選擇以下

DATEDIFF(day, CASE WHEN @start > j.fromdate 
        THEN @start 
        WHEN @start = j.fromdate 
        THEN j.fromdate 
        ELSE DATEADD(day,-1,j.fromdate) 
       END, 
       CASE WHEN @end > j.untildate 
        THEN j.untildate 
        ELSE @end 
       END) * (j.act_hours/7) TotalContractedHours,