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

nvshenfann 2011-11-08 02:35:30
用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
...全文
464 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengxuan 2011-11-09
  • 打赏
  • 举报
回复
回过你的另外一帖
火才松 2011-11-09
  • 打赏
  • 举报
回复
+1[Quote=引用 7 楼 nbdba 的回复:]

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……
[/Quote]
kingquren520 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 qianjin036a 的回复:]
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>500……
[/Quote]

支持!!大侠,学习了。。。
--小F-- 2011-11-08
  • 打赏
  • 举报
回复
可以写一个函数。不过中心语法还是CASE ..WHEN
-晴天 2011-11-08
  • 打赏
  • 举报
回复
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
NBDBA 2011-11-08
  • 打赏
  • 举报
回复
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 行受影响)
Mr_Nice 2011-11-08
  • 打赏
  • 举报
回复
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
  • 打赏
  • 举报
回复
case when 积分 between 5000 and 30000 then 积分*0.02
when 积分 between 30000 and 80000 then 30000*0.02+(积分-30000)*0.03
……
end
cutebear2008 2011-11-08
  • 打赏
  • 举报
回复
if
else if
else
nvshenfann 2011-11-08
  • 打赏
  • 举报
回复
用不了WHEN
快溜 2011-11-08
  • 打赏
  • 举报
回复
case when
  • 打赏
  • 举报
回复
case when 条件1 then 值2
when 条件1 then 值2
end

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧