我有一个表格,存储每小时的工资率以及与每个工资相关的起始和结束价值。理论上说,您的每小时工资取决于您在开始和结束价值之间的收入。
表示例 - dbo.PayScales
PayScaleId Starting Ending HourlyRate
1 0.00 32.88 12.00
2 32.89 34.20 12.50
3 34.21 35.52 13.00
我将收入与个人ID一起存储在一个单独的表格中,我需要根据收入(我对其进行完整的思考)查找小时费用
表示例 - dbo.Employees
EmpId Takings HourlyRate
1 33.50
2 31.19
3 37.00
所以我的预期结果将是:
EmpId 1 Hourly rate = 12.50
EmpId 2 Hourly rate = 12.00
EmpId 3 Hourly rate = 13.00 as the value is greater than the ending value.
答案 0 :(得分:2)
您可以将CROSS APPLY
与TOP
一起使用:
SELECT *
FROM dbo.Employees e
CROSS APPLY(
SELECT TOP 1 p.HourlyRate
FROM dbo.PayScales p
WHERE
e.Takings BETWEEN p.Starting AND p.Ending
OR e.Takings > p.Ending
ORDER BY p.Ending DESC
) t
答案 1 :(得分:1)
当然@ FelixPamittan的答案解决了这个问题,但是如果您的数据发生微小的变化,那就归结为一个简单的连接。
将最高Ending
更改为真正高的值(999999999),大于任何Takings
或NULL:
FROM #Employees AS e
JOIN #PayScales AS p
ON e.Takings BETWEEN p.Starting AND p.Ending
-- or
ON e.Takings BETWEEN p.Starting AND COALESCE(p.Ending, 999999999)