2017-08-17 39 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,