我有一个表中每个员工的月费率,我需要根据特定项目中的员工开始和结束日期平均分配。 对于例如员工X的月费率为4300美元,存储在表A中。员工开始时间为&该项目的结束日期为2017-11-03' &安培; ' 2017年12月12日'分别存储在表B中。我需要11月和12月的员工成本。
感谢您的任何帮助。
编辑:
表1:员工详细信息 Col1-员工姓名 Col2-开始日期 Col3-结束日期
表2:价目表 COL1地点 COL2级 Col3-每月费用
表3:员工开票 COL1年 COL2个月 Col3-员工 Col4-每月费用
因此,如果员工从11月4日 - 17日到31日 - 12月17日工作,每月费用为4000美元,那么在结算表中应该有2个条目,如:
2017 11月,EMP1,(三十〇分之四千)*((30-4)+1) 2017年,月,Emp1,4000
我很乐意根据表1中的输入在表3中插入2个条目,但无法计算自定义成本
case
when (webResource_Details_ESS_recurrent_entries.recurrent_month<>DATEPART(mm, l.start_date) or
webResource_Details_ESS_recurrent_entries.recurrent_month<>DATEPART(mm, l.end_date))
then
l.Employee_Cost
when DATEPART(day, l.start_date) <> 1 and Eomonth(l.start_date) = Eomonth(l.end_date) then
(Datediff(day, l.start_date, l.end_date) *
(l.Employee_Cost / Datediff(day,Eomonth(l.start_date), Dateadd(month,1, Eomonth(l.start_date))) ) )
when DATEPART(day, l.start_date) <> 1 and Eomonth(l.start_date) <> Eomonth(l.end_date) then ( Datediff(day, l.start_date, Eomonth(l.start_date)) *
( l.Employee_Cost /Datediff(day, Eomonth(l.start_date), Dateadd(month, 1,Eomonth(l.start_date))) ) )
when DATEPART(day, l.end_date) <> (DATEPART(day, DATEADD(second,-1,DATEADD(month, DATEDIFF(month,0,l.end_date)+1,0)))) and Eomonth(l.start_date) <> Eomonth(l.end_date) then (Datediff(day, ( Dateadd(month, Datediff(month, 0,l.end_date),0) ),l.end_date)
*(l.Employee_Cost /Datediff(day, Eomonth(l.end_date),Dateadd(month, 1, Eomonth(l.end_date)))))
end as Employee_Cost
答案 0 :(得分:0)
SELECT em.employeed,
CASE
WHEN Eomonth(startdate) = Eomonth(enddate)
THEN (Datediff(day, startdate, enddate) *
(rate / Datediff(day,Eomonth(startdate), Dateadd(month,1, Eomonth(startdate))) ) )
ELSE ( ( Datediff(day, startdate, Eomonth(startdate)) *
( rate /Datediff(day, Eomonth(startdate), Dateadd(month, 1,Eomonth(startdate))) ) ) +
(Datediff(day, ( Dateadd(month, Datediff(month, 0,enddate),0) ),enddate)
*(rate /Datediff(day, Eomonth(enddate),Dateadd(month, 1, Eomonth(enddate))))))
END AS wage
FROM employeemaster em
INNER JOIN employeerate AS er
ON ( em.employeed = er.employeed )
First Case将处理开始日期和结束日期都在同一个月的情况
eomonth(startdate) = eomonth(enddate) then (datediff(day,startdate,enddate)*(rate/datediff(day, eomonth(startdate), dateadd(month, 1, eomonth(startdate)))))
计算开始日期的天数和费率
datediff(day,startdate,eomonth(startdate)) * (rate/datediff(day, eomonth(startdate), dateadd(month, 1, eomonth(startdate)))))
计算结束日期的天数和费率
(datediff(day,(DATEADD(month, DATEDIFF(month, 0, enddate), 0)),enddate)* rate/datediff(day, eomonth(enddate), dateadd(month, 1, eomonth(enddate))))