2014-09-04 95 views
1

條件運算符

ename location sal 
A  X   10 
A  x   20 
B  y   30 
B  x   40 

ref_table

參考

ename location sal hike 
A  x   '<30' 10% 
B  y   '>30' 25% 

對於Ref_table的第一個記錄我的邏輯應

Select Sal 
from source a 
left join 
Ref_table B 
where 
a.sal<=B.sal 

對於Ref_table的第二記錄米Ÿ邏輯應該

Select Sal 
from source a 
left join 
Ref_table B 
where 
a.sal>=B.sal 
+2

您正在使用哪個數據庫? – 2014-09-04 15:32:46

回答

0

試試這個:

select Sal 
from source a 
left join Ref_table B on case when substring(B.Sal,1,1)='<' and a.sal<=cast(substring(B.sal,2,10) as int) then 1 when substring(B.Sal,1,1)='>' and a.sal>=cast(substring(B.sal,2,10) as int) then 1 else 0 end=1 

另外要小心,因爲你用左連接並在其中將只返回滿足您的條件(類似於內部連接)行。

+0

這裏then else子句會返回右邊的輸出? – 2014-09-04 17:25:47

+0

因爲你的連接標準是'sal'列的一部分,你必須檢索它並有條件地連接表,這裏我只在case的值等於1時連接表,這對於兩種可能的情況是成立的1)'sal'包含'<'; 2)'sal'包含'>'。 – Piotrek 2014-09-23 18:16:40

0

試試這個:

select 
    s.sal, 
    s.ename 
from 
    source s inner join 
    ref_table r on 
    s.ename = r.ename 
where 
    (ename = 'a' and s.sal<=r.sal) or 
    (ename = 'b' and s.sal>=s.sal)