如果未满足加入条件,请加入最大值

时间:2015-11-17 19:08:03

标签: sql-server join

我试图根据他工作的时间来计算员工休假的时间。

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个,这样我就可以加入而不用担心。

2 个答案:

答案 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行,则永远不应该达到默认值。