sql server 货币型例子(sql server把退款总金额拆分到尽量少的多个订单中详解)
类别:数据库 浏览量:2244
时间:2021-10-05 00:04:41 sql server 货币型例子
sql server把退款总金额拆分到尽量少的多个订单中详解一、问题
原来有三个充值订单,现在要退款450元,如何分配才能让本次退款涉及的充值订单数量最少?具体数据参考下图:
二、解决方案
Step 1:对可退金额进行降序排列,以便优先使用可退金额比较大的订单
Step 2:使用CTE公用表达式,实现类似for或while循环或游标的功能
三、脚本
create table #t ( 充值 int, 已退 int, 可退 int ) insert into #t(充值, 已退, 可退) values (200, 100, 100), (500, 200, 300), (300, 100, 200) /* 作者:zhang502219048 脚本来源:https://www.cnblogs.com/zhang502219048/p/14127208.html */ declare @i要退 int = 450; with cte1 as ( select *, row_number() over(order by 可退 desc) rn, 0 可发起退款, 0 待退 from #t ), cte2 as ( select rn, 充值, 已退, 可退, 可发起退款 = case when @i要退 > 可退 then 可退 else @i要退 end, 待退 = @i要退 - case when @i要退 > 可退 then 可退 else @i要退 end -- 待退 = 要退 - 可发起退款 from cte1 where rn = 1 union all select t2.rn, t2.充值, t2.已退, t2.可退, 可发起退款 = case when t1.待退 > t2.可退 then t2.可退 else t1.待退 end, 待退 = t1.待退 - case when t1.待退 > t2.可退 then t2.可退 else t1.待退 end from cte1 t2 inner join cte2 t1 on t1.rn = t2.rn - 1 -- t2是t1的下一条记录 --where t2.rn > 1 and t1.待退 > 0 ) select * from cte2 drop table #t
四、脚本运行结果
总结
到此这篇关于sql server把退款总金额拆分到尽量少的多个订单中的文章就介绍到这了,更多相关sql server退款总金额拆分到订单内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
您可能感兴趣
- SqlServer 表单查询问题及解决方法(SqlServer 表单查询问题及解决方法)
- sqlserver中根据日期时间获取秒数(sql server编写通用脚本实现获取一年前日期的方法)
- SqlServer数据库中文乱码问题解决方法(SqlServer数据库中文乱码问题解决方法)
- sqlserver 比较日期(解析SQL Server中SQL日期转换出错的原因)
- 查sqlserver锁表语句(Sql Server如何查看被锁的表及解锁的方法)
- sqlserver数据库如何设置循环日志(sqlserver 实现收缩数据库日志操作)
- sqlserver设置自动备份的注意事项(SQL server 定时自动备份数据库的图文方法)
- sqlserver电脑休眠时断开连接(浅谈sqlserver下float的不确定性)
- sqlserver 创建数据库链接(SqlServer数据库远程连接案例教程)
- 修改sqlserver数据库名称步骤(SQL server数据库创建代码 filegroup文件组修改的示例代码)
- SQLServer日期函数总结案例详解(SQLServer日期函数总结案例详解)
- sqlserver2012知识点(SQL Server 2012 安全概述)
- sqlserver完全删除教程(sql server编写archive通用模板脚本实现自动分批删除数据)
- sqlserver游标使用场景(解析SQL Server聚焦移除Bookmark Lookup、RID Lookup、Key Lookup)
- sqlserver修改排序规则几种方法(SQL Server 分页编号的另一种方式推荐)
- sqlserver2008手动备份方法(MSSQL 2008 自动备份数据库的设置方法)
- 做技术难吗(技术难不难)
- 林心如是谁(林心如是谁演的)
- 泰国安全吗(泰国安全吗2023)
- 菲律宾安全吗(菲律宾安全吗)
- 泰国旅游攻略(泰国旅游攻略必去景点)
- 数字藏品市场有多乱 周杰伦丢了 一只猴 ,损失超300万(数字藏品市场有多乱)
热门推荐
- oracle中varchar2(byte)、varchar2(char)、nvarchar2()区别
- css浮动布局和盒子(css 盒模型 文档流 几种清除浮动的方法实例详解)
- docker容器启动执行多条命令(详解Shell脚本控制docker容器启动顺序)
- docker如何访问nginx(基于docker启动nginxssl配置)
- nginxdjango部署(详解Django+uwsgi+Nginx上线最佳实战)
- 小程序scroll-view自适应高度(小程序瀑布流解决左右两边高度差距过大的问题)
- python定时推送邮件(python实现定时压缩指定文件夹发送邮件)
- composer怎么设置镜像(使用composer命令加载vendor中的第三方类库 的方法)
- pandas字典转化为dataframe(pandas修改DataFrame列名的实现方法)
- 卷积神经网络python实现(Python通过TensorFlow卷积神经网络实现猫狗识别)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9