我试图根据他工作的时间来计算员工休假的时间。
employeeVacation - > id,yearsWorked,vacationHours
员工 - > empid,StartDate
我可以使用此
获得员工工作的年数datepart(year, getdate()) - datepart(year,StartDate) as yearsWorked
工作8年后,假期时间相同。这是我的假期表。
id years vacationHours
1 0 40
2 1 40
3 2 40
4 3 80
5 4 80
6 5 80
7 6 80
8 7 120
select e.empid, ev.vacationhours from employee e join employeevacation ev on
ev.yearsWorked = datepart(year, getdate()) - datepart(year,e.StartDate)
所以说你工作了30年我不能加入以获得休假时间。我是否应该寻求加入,或者我应该减少我的损失,并在假期表中插入多达100个,这样我就可以加入而不用担心。
答案 0 :(得分:1)
你可以做这样的事情
select e.empid, coalesce(ev.vacationhours, evMax.vacationhours)
from employee e
left join employeevacation ev on ev.yearsWorked = datepart(year, getdate()) - datepart(year,e.StartDate)
join employeevacation evMax on evMax.yearsWorked = 7
答案 1 :(得分:1)
SELECT e.empid, ISNULL(ev.vacationhour, 0)
FROM employee e
LEFT JOIN employeevacation ev ON ev.yearsWorked = (
SELECT MAX(ev2.yearsWorked)
FROM employeevacation ev2
WHERE yearsWorked<=datepart(year, getdate()) - datepart(year,e.StartDate)
)
基本上,您查询他有资格获得的最高门槛。
您可以使用您可能需要的任何默认值替换0。如果您有一个0年的employeevacantion行,则永远不应该达到默认值。