2
我有三个表,我试图从dbo.VacationRateTable挑VacationPctg到LabourType和雇员匹配dbo.TimeData选择行与最接近的,但不高于数量
dbo.TimeData
EmployeeID LabourType WorkDate TimeSpent
451 Handling 2015-08-01 2.5
499 Supervisor 2015-08-01 1.9
505 Clerical 2015-08-01 6.2
dbo.EmployeeTable
EmployeeID HireDate
451 2005-01-01
499 2001-01-01
505 2015-01-01
dbo.VacationRateTable
RateID LabourType DaysSinceHired VacactionPctg
1 Handling 0 0.4
2 Handling 1825 0.6
3 Handling 4380 0.8
4 Clerical 0 0.4
5 Clerical 1825 0.6
6 Clerical 4380 0.8
7 Supervisor 0 0.4
8 Supervisor 1095 0.6
9 Supervisor 3650 0.8
这里是我的代码书面。但是,我似乎无法正确链接LabourType。似乎一旦DaySinceHired的数量超过3650,该声明不会返回任何结果。
SELECT ET.EmployeeID
,ET.HireDate
,td.LabourType
,VRT.DaysSinceHired
,VRT.VacationPctg
,TD.WorkDate
,TD.TimeSpent
,-DATEDIFF(DAY,TD.WorkDate, ET.HireDate) as DaysWorked
FROM EmployeeTable AS ET
LEFT join TimeData as TD
on et.EmployeeID = TD.EmployeeID
inner JOIN VacationRateTable AS VRT
ON VRT.LabourType = TD.LabourType
and VRT.DaysSinceHired =
(SELECT MAX(DaysSinceHired)
FROM VacationRateTable
WHERE DaysSinceHired <= -DATEDIFF(DAY,TD.WorkDate, ET.HireDate))
AND TD.WorkDate > '2015-07-31' AND TD.WorkDate <'2015-09-01'
非常感谢JPW。这很好 –