现在我用SQL想在存储过程中写语法  将实发算出应发
开始我想将各个临界点的实发全得出来  然后将现有的实发和各个临界点进行比较得出税率和速算
然后按(实发-2000*税率-速算)/(1-税率)算  
现在我得出的各个临界点是这样的
  set @iGSJB0=2000
  set @iGSJB1=500+2000-500*0.05
  set @iGSJB2=2000+2000-2000*0.1-25
  set @iGSJB3=5000+2000-5000*0.15-125
  set @iGSJB4=20000+2000-20000*0.2-375
  set @iGSJB5=40000+2000-40000*0.25-1375
  set @iGSJB6=60000+2000-60000*0.3-3375
  set @iGSJB7=80000+2000-80000*0.35-6375
  set @iGSJB8=100000+2000-100000*0.4-10375
按照3800实发   扣除养老1055  应发5027.22
应该得出税率为0.1速算为25
但按照我得出的临界点税率为0.15速算为125
这个临界点该怎么得出
或者还有什么更好的办法?? 我想应该还要把个人扣除的社保和公积金带到那个范围中算临界点的,现在就是不知道怎么个带法  怎么写公式

解决方案 »

  1.   

    -- 计税工式declare @amount numeric(15,2)
    set @amount = 3800select CASE
     WHEN ( @amount - 2000) BETWEEN 0.01 AND 500  
     THEN ( @amount - 2000) * 0.05  
     WHEN ( @amount - 2000) BETWEEN 500.01 AND 2000  
     THEN ( @amount - 2000) * 0.1 - 25  
     WHEN ( @amount - 2000) BETWEEN 2000.01 AND 5000  
     THEN ( @amount - 2000) * 0.15 - 125  
     WHEN ( @amount - 2000) BETWEEN 5000.01 AND 20000  
     THEN ( @amount - 2000) * 0.20 - 375  
     WHEN ( @amount - 2000) BETWEEN 20000.01 AND 40000  
     THEN ( @amount - 2000) * 0.25 - 1375  
     WHEN ( @amount - 2000) BETWEEN 40000.01 AND 60000  
     THEN ( @amount - 2000) * 0.30 - 3375  
     WHEN ( @amount - 2000) BETWEEN 60000.01 AND 80000  
     THEN ( @amount - 2000) * 0.35 - 6375  
     WHEN ( @amount - 2000) BETWEEN 80000.01 AND 100000  
     THEN ( @amount - 2000) * 0.40 - 10375  
     WHEN ( @amount - 2000) >= 100000  
     THEN ( @amount - 2000) * 0.45 - 15375  
    else 0
    END
    -- 其实临界点没影响,比如工资4000,无论按哪种算法都一样
    print (4000 - 2000) * .10 - 25
    print (4000 - 2000) * .15 - 125--175.0
    --175.00
      

  2.   

    我明白了,你是说通过税额反算工资。有个贴子可以参考http://topic.csdn.net/u/20100605/11/4060a87b-99e3-4ff3-a07d-3e9071e03f9c.html不过因为税已经四舍五入了,所以某些情况下反算出来的工资会有点误差。