求SQL语句!!!在线等候各位大虾。(50分)

W

wjli

Unregistered / Unconfirmed
GUEST, unregistred user!
我在计算工资的时候遇到这样的问题:有一项医疗补助是按工龄计算的:
工龄小于5年就就是基本工资的5%,6-10年是10%,11-15年15%,
15年以上是20%;
 问题:我在计算这个的时候能一条SQL语句搞定。可以如何搞定? 谢谢各位!!!
 
case when 工龄<=5 then 医疗补助=基本工资*0.05
when 工龄>5 and 工龄<=10 then 医疗补助=基本工资*0.1
when ........
end
 
这个你可以在结果集里计算呀!

一条搞定,我不行!帮你up吧
 
在SQL语句中,取医疗补助时,使用如下函数.
iif(工龄<5,5%,iif(工龄<10,10%,iif(工龄<15,15%,20%)))
 
sql server: case
oracle: decode
 
建立一个表,内容是
a,b,c
0,5,0.05
6,10,0.1
11,15,0.15
15,2000,0.20
select a.基本工资*(1+b.c) from a a,b b where a.工龄<=b.b and a.工龄 >= b.a
 
同意用
case when 工龄<=5 then 医疗补助=基本工资*0.05
when 工龄>5 and 工龄<=10 then 医疗补助=基本工资*0.1
when ........
end
是最好的!
 
谢谢各位的关心!!!补充说明:
1.我用的是 Oracle ;
2.这个工龄是在计算的时候才与系统时间算出来的。
问题:1.case 是在Sql server中才行 在Oracle 中是什么函数呢?
     还是没有。
     To armyjiang: decode这个是只能单个匹配,不能进行分段匹配。
   2. To MichaelZhu:
      这是iif(工龄<5,5%,iif(工龄<10,10%,iif(工龄<15,15%,20%)))在Sql server
      上的吧,在Oracle里编译不通过。
       
 
如果有IIF可以满足你的要求吗?
自己动手写一个IIF的函数.
 
使用这个:
function IfThen(AValue: Boolean; const ATrue: Integer; const AFalse: Integer = 0): Integer; overload;
 
816中同样的有CASE when else,不过需要用嵌套的方式,而不是象sql server中那么明了。
 
To MichaelZhu:我要更新整个数据库表的记录;不是某条记录。
 
我给的是要写在SQL中的,可以更新全部符合条件的记录.
 
各位大虾给我指点指点啊!!!
 
如果是bde(PARADOX)中的單表,能做嗎???請教高手!
 
select decode(sign(工龄 - 16), -1,decode(ceil(工龄 / 5), 1, 工资 * 0.05, 2, 工资 * 0.1, 3, 工资 * 0.15, 0), 0 工资 * 0.2, 1, 工资 * 0.2);
 
错了,修改--
select decode(sign(工龄 - 16), -1,decode(ceil(工龄 / 5), 1, 工资 * 0.05, 2, 工资 * 0.1, 3, 工资 * 0.15, 0), 0, 工资 * 0.2, 1, 工资 * 0.2);
 
顶部