查找价值以返回小时费率

时间:2016-05-24 07:55:42

标签: sql sql-server-2008

我有一个表格,存储每小时的工资率以及与每个工资相关的起始和结束价值。理论上说,您的每小时工资取决于您在开始和结束价值之间的收入。

表示例 - 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.

2 个答案:

答案 0 :(得分:2)

您可以将CROSS APPLYTOP一起使用:

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

ONLINE DEMO

答案 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)