2016-05-24 40 views
0

我有一個表存儲每小時工資率和一個開始和結束價值與每個關聯。理論上說,你的小時工資取決於你在開始和結束價值之間的收入。查找價值小時返回率

表實例 - 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沿徵收,而我需要查找基礎上,徵收這我有一個完整的hourlyrate(關於精神塊)

表實例 - dbo.Employees

EmpId  Takings HourlyRate 
1   33.50 
2   31.19 
3   37.00 

所以我exepected結果將是:

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

您可以TOP一起使用CROSS APPLY

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

被要求究竟是什麼,謝謝費利克斯 – Stuart1044

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)