Sql 查找值以返回小时费率

Sql 查找值以返回小时费率,sql,sql-server-2008,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.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.

您可以将
交叉应用
顶部
一起使用:

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

您可以将
交叉应用
顶部
一起使用:

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

当然@FelixPamittan的答案解决了这个问题,但只要对数据做一点小改动,就可以简化为一个简单的连接

将最高的
结尾
更改为非常高的值(999999999),大于任何
收入
,或空值:

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)

当然@FelixPamittan的答案解决了这个问题,但是只要对您的数据做一点小小的更改,就可以简化为一个简单的连接

将最高的
结尾
更改为非常高的值(999999999),大于任何
收入
,或空值:

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)