表 存款存款额 已存天数 存款人(不重复)
52 201 a
10 30 b
536 8 xx
44 215 xxx
21 180 xxxx
52 181 xxxxx
0-60天 日利率是0
60-180天 日利率是0.01
大于180天 日利率是0.02现在要查4月份的利息数,比如存款人a 的4月份利息
201天-180天 = 21天,这21天的日利率是0.024月份31天,还有10天的利息,那10天的利息就在60-180的区间里面,日利率是0.01,最后把这21天的跟10天的利息加起来。
52 201 a
10 30 b
536 8 xx
44 215 xxx
21 180 xxxx
52 181 xxxxx
0-60天 日利率是0
60-180天 日利率是0.01
大于180天 日利率是0.02现在要查4月份的利息数,比如存款人a 的4月份利息
201天-180天 = 21天,这21天的日利率是0.024月份31天,还有10天的利息,那10天的利息就在60-180的区间里面,日利率是0.01,最后把这21天的跟10天的利息加起来。
解决方案 »
- 一般的基于SQL2000的 新闻系统(支持静态生成) 后台是如何实现数据备份功能? 除了备份数据库表,还要备份文件目录下的图片、Flash、吗
- asp连接sql2005有时提示套节字只能使用一次
- sql server 老是 有 缓存 数据 不更新 急!!
- 关于导入文本文件数据遇到的问题
- 请教一个ROUNDUP的问题
- '?'附近语法错误!!!!!!!!!!!!(在线等)。
- 求SQL死锁方面的问题~~~~
- sqlserver2000 与 NAS 设备
- 如何删除重复的记录
- 求视图,根据用户表与年份表,统计3个工作表,得到各用户的每个年份的总工作时间,没有则为0
- 程储过程里面写事务,怎样写才不会引起死锁?
- 如何用asp启动sqlserver2000服务?
利息=case when 已存天数>180 then 存款额*(已存天数-180)*0.02+存款额*(180-60)*0.01
when 已存天数 between 60 and 180 then 存款额*(已存天数-60)*0.01
else 0
end from 存款
declare @存款 table (存款额 int,已存天数 int,存款人 varchar(5))
insert into @存款
select 52,201,'a' union all
select 10,30,'b' union all
select 28,241,'c' union all
select 536,8,'xx' union all
select 44,215,'xxx' union all
select 21,180,'xxxx' union all
select 52,181,'xxxxx' union all
select 78,64,'xxxyy'select 存款额,已存天数,存款人,利息=
存款额*
case when sign(已存天数-180)=1 then 已存天数-180 else 0 end*0.02
+
case when sign(已存天数-180)=-1 and sign(已存天数-60)=1 then 已存天数-60 else 0 end*0.01
from @存款
/*
存款额 已存天数 存款人 利息
----------- ----------- ----- ---------------------------------------
52 201 a 21.84
10 30 b 0.00
28 241 c 34.16
536 8 xx 0.00
44 215 xxx 30.80
21 180 xxxx 0.00
52 181 xxxxx 1.04
78 64 xxxyy 0.04
*/
(存款额 decimal(10,2),
已存天数 int,
存款人 varchar(20)
)
insert 存款表 select 52,201,'a'
union all select 10,30,'b'
union all select 536,8,'xx'
union all select 44,215,'xxx'
union all select 52,181,'xxxx'select 存款额,已存天数,存款人,
[利息]=(case when 已存天数<=60 then 0
when 已存天数<=180 then 存款额*(已存天数-60)*0.01
else 120*存款额*0.01+存款额*(已存天数-180)*0.02 end)
from 存款表
我的还得优化,学习楼上几位
declare @存款 table (存款额 int,已存天数 int,存款人 varchar(5))
insert into @存款
select 52,201,'a' union all
select 10,30,'b' union all
select 28,241,'c' union all
select 536,8,'xx' union all
select 44,215,'xxx' union all
select 21,180,'xxxx' union all
select 52,181,'xxxxx' union all
select 78,64,'xxxyy'select 存款额,已存天数,存款人,利息=
存款额*
(--是不是应该加一个括号啊?
case when sign(已存天数-180)=1 then 已存天数-180 else 0 end*0.02
+
case when sign(已存天数-180)=-1 and sign(已存天数-60)=1 then 已存天数-60 else 0 end*0.01
)
from @存款
select 存款额,已存天数,存款人,
利息=case when 已存天数-180>=day(getdate()) then 存款额*day(getdate())*0.02
when 已存天数-180<day(getdate()) and 已存天数-180>=0 then 存款额*(已存天数-180)*0.02+存款额*(day(getdate())+180-已存天数)*0.01
when 已存天数-60>=day(getdate()) then 存款额*day(getdate())*0.01
when 已存天数-60<day(getdate()) and 已存天数-60>=0 then 存款额*(已存天数-180)*0.01
end
from 存款