2016-05-24 5 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 

Iは、人物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 
FelixPamittanの答え@もちろん

ONLINE DEMO

+1

必要としたまさに、あなたのフェリックスに感謝 – Stuart1044

1

は、問題を解決しますが、あなたのデータの小さな変化と、それは簡単にダウンです参加する。

変更本当に高い値(999999999)の最高Ending、任意の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) 
関連する問題