+ -
当前位置:首页 → 问答吧 → 用T-SQL如何写多分支语句

用T-SQL如何写多分支语句

时间:2011-11-08

来源:互联网

用T-SQL如何写多分支语句

这是一个积分返还金额的问题,如果我的积分范围分这几段
5000~30000 (乘以2%)
30001~50000 (乘以3%)
50001~100000 (乘以4%)
100001以上的 (乘以5%)
比如我现在的积分是67500那么的返还金额应该是
超出50000的部分乘以4%就是17500*4%=700
超出30000的部分乘以3%就是20000*3%=600
剩下的30000*2%=600
那么应该返还金额就是700+600+600=1900

作者: nvshenfann   发布时间: 2011-11-08

case when 条件1 then 值2
  when 条件1 then 值2
end

作者: HEROWANG   发布时间: 2011-11-08

case when

作者: ssp2009   发布时间: 2011-11-08

用不了WHEN

作者: nvshenfann   发布时间: 2011-11-08

if 
else if
else

作者: cutebear2008   发布时间: 2011-11-08

case when 积分 between 5000 and 30000 then 积分*0.02  
  when 积分 between 30000 and 80000 then 30000*0.02+(积分-30000)*0.03
  ……
end

作者: HEROWANG   发布时间: 2011-11-08

SQL code
DECLARE @i INT

SELECT  CASE WHEN @i > 50000
             THEN ( @i - 50000 ) * 0.04 + 20000 * 0.03 + 30000 * 0.02
             ELSE CASE WHEN @i BETWEEN 30000 AND 50000
                       THEN ( @i - 30000 ) * 0.03 + 30000 * 0.02
                       ELSE @i * 0.02
                  END
        END

作者: OrchidCat   发布时间: 2011-11-08

SQL code
declare @积分 int
set @积分 = 67500
select case when @积分 >= 100001 then  (@积分 - 100000) * 0.05
         + 50000 * 0.04
         + 20000 * 0.03
         + 30000 * 0.02
         when @积分 >= 50001 then  (@积分 - 50000) * 0.04
         + 20000 * 0.03
         + 30000 * 0.02
         when @积分 >= 30001 then  (@积分 - 30000) * 0.03
         + 30000 * 0.02
         when @积分 >= 5000 then  @积分  * 0.02
         else 0 
         end as 返还金额

--结果
返还金额
---------------------------------------
1900.00

(1 行受影响)

作者: NBDBA   发布时间: 2011-11-08

SQL code
create table TB(积分 int)
insert into TB select 67500
insert into TB select 125412
go
create function fhje(@jf int)
returns decimal(10,2)
as
begin
declare @je decimal(10,2)
if @jf>5000 and @jf<=30000
    set @je=@jf*0.02
else if @jf>30000 and @jf<=50000
    set @je=600+(@jf-30000)*0.03
else if @jf>50000 and @jf<=100000
    set @je=1200+(@jf-50000)*0.04
else if @jf>100000
    set @je=2000+(@jf-100000)*0.05
return @je
end
go
select 积分,dbo.fhje(积分) as 返还金额
from tb
/*
积分          返还金额
----------- ---------------------------------------
67500       1900.00
125412      3270.60

(2 行受影响)

*/
go
drop table tb
drop function dbo.fhje

作者: qianjin036a   发布时间: 2011-11-08

可以写一个函数。不过中心语法还是CASE ..WHEN

作者: fredrickhu   发布时间: 2011-11-08

回过你的另外一帖

作者: pengxuan   发布时间: 2011-11-09