根据售额计算返点金额

ttyrone 2018-09-29 01:52:28
有这样一个需求:
某个省累计的销售额在10w的返点为10%,
销售额在10w到20w的的返点为15%,
销售额在20w以上的返点为20%

表结构如下

CREATE TABLE [dbo].[DR](
[identifier] [int] IDENTITY(1,1) NOT NULL,
[PROVINCE] [varchar](100) NOT NULL,--省
[City] [varchar](100) NOT NULL,--市
[StartAmount] [decimal](20, 2) NOT NULL,--开始金额
[EndAmount] [decimal](20, 2) NOT NULL,--结束金额
[CommissionRate] [decimal](10, 2) NOT NULL,--返点率
)

插入测试数据

insert into DR (PROVINCE,City,StartAmount,EndAmount,CommissionRate)
values ('110000','110000',0,100000,0.1)
insert into DR (PROVINCE,City,StartAmount,EndAmount,CommissionRate)
values ('110000','110000',100001,200000,0.15)
insert into DR (PROVINCE,City,StartAmount,EndAmount,CommissionRate)
values ('110000','110000',200001,1000000000,0.2)


假设之前的销售额为8w,今天的销售额为5w,那今天的这五万中的2w(加上之前的8w正好是第一档的10w)应该按10%来算返点,五万中的3w应该按第二档的15%来计算返点,请问这个应该怎么写
这5w的返点额应该是20000*0.1+30000*0.15(2000+4500=6500)
尝试了递归,没有搞定,请大家帮帮忙,谢谢了
...全文
376 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ttyrone 2018-10-06
  • 打赏
  • 举报
回复
引用 4 楼 shw014 的回复:
或者再加一列,先计算 10W 应返 10000 20W 应返 25000 iden... PROVINCE City StartAmount EndAmount CommissionRate BaseRtaeAmount ------- --------- ----- ------------ -- ------- ----------- ----------- 1 110000 110000 0 100000 0.1 0 2 110000 110000 100000 200000 0.15 10000 3 110000 110000 200000 1000000000 0.20 25000

declare @JE1 decimal  
declare @JE decimal
SELECT @JE1=80000,@JE=50000
--计算已缴  
select  (@JE1-STARTAMOUNT) * CommissionRate + BaseRtaeAmount
      FROM DR WHERE @JE1  >   STARTAMOUNT AND @JE1<= ENDAMOUNT 
--计算总缴  
select  (@JE+@JE1- STARTAMOUNT)* CommissionRate + BaseRtaeAmount
      FROM DR WHERE @JE+@JE1 >   STARTAMOUNT AND @JE+@JE1<= ENDAMOUNT
能解决我的问题,非常感谢
shw014 2018-09-30
  • 打赏
  • 举报
回复
或者再加一列,先计算 10W 应返 10000 20W 应返 25000
iden... PROVINCE City StartAmount EndAmount CommissionRate BaseRtaeAmount
------- --------- ----- ------------ -- ------- ----------- -----------
1 110000 110000 0 100000 0.1 0
2 110000 110000 100000 200000 0.15 10000
3 110000 110000 200000 1000000000 0.20 25000

declare @JE1 decimal
declare @JE decimal
SELECT @JE1=80000,@JE=50000
--计算已缴
select (@JE1-STARTAMOUNT) * CommissionRate + BaseRtaeAmount
FROM DR WHERE @JE1 > STARTAMOUNT AND @JE1<= ENDAMOUNT
--计算总缴
select (@JE+@JE1- STARTAMOUNT)* CommissionRate + BaseRtaeAmount
FROM DR WHERE @JE+@JE1 > STARTAMOUNT AND @JE+@JE1<= ENDAMOUNT
shw014 2018-09-30
  • 打赏
  • 举报
回复
declare @JE1 decimal  
declare @JE decimal
SELECT @JE1=80000,@JE=50000

select SUM( CASE WHEN @JE+@JE1>=EndAmount THEN
(EndAmount-StartAmount )*CommissionRate
WHEN @JE+@JE1>=StartAMount THEN
(@JE+@JE1-StartAmount )*CommissionRate ELSE 0 END ) 总应缴,
SUM(CASE WHEN @JE1 >=EndAmount THEN
(EndAmount-StartAmount )*CommissionRate
WHEN @JE1 >=StartAMount THEN
( +@JE1-StartAmount )*CommissionRate ELSE 0 END) 已缴
FROM DR

总应缴-已缴 就你要的值
我i把表里的数据 StartAmount 改了一下 100001 改成了 100000 ,200001 改成了 200000

ttyrone 2018-09-29
  • 打赏
  • 举报
回复
引用 1 楼 sinat_28984567 的回复:
销售表得有一个吧?之前的8W从哪里得到?
销售金额之前的8w和今天的5w可以用常量来表示,感谢回复。
二月十六 2018-09-29
  • 打赏
  • 举报
回复
销售表得有一个吧?之前的8W从哪里得到?

27,579

社区成员

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

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