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索引实例(SQL Server索引的原理深入解析)
- python2.7连接sqlserver数据库(Python使用sqlalchemy模块连接数据库操作示例)
- sqlserver替换脚本(SQL Server中对数据截取替换的方法详解)
- sql server导入数据csv文件(大容量csv快速内导入sqlserver的解决方法推荐)
- sql server建表语句带字段说明(SqlServer给表增加多个字段的语法)
- sqlserver怎么修改表结构(SQL Server中修改“用户自定义表类型”问题的分析与方法)
- sqlserver 创建数据库链接(SqlServer数据库远程连接案例教程)
- sqlserver查看数据表更新时间(SQL Server实现显示每个类别最新更新数据的方法)
- sqlserver数据库如何分页(SQL server分页的4种方法示例很全面)
- SqlServer中如何解决session阻塞问题(SqlServer中如何解决session阻塞问题)
- sqlserver日志目录是否过大(SQL Server利用sp_spaceused如何查看表记录存在不准确的情况)
- sqlservercount函数的用法(SQL Server中row_number函数的常见用法示例详解)
- sqlserver数据库文件包括(详解SQL Server数据库状态和文件状态)
- sqlserverlog原理(sql server中错误日志errorlog的深入讲解)
- sql server2008如何升级到2012(MS sqlserver 2008数据库转换成2000版本的方法)
- sqlserver安装使用教程(SQL Server 2019下载与安装教程自定义安装)
- 吉林神秘传染链跨省 传染源尚未找到,舒兰 封城(吉林神秘传染链跨省)
- 吉林舒兰 封城 聚集性疫情传播链已延至沈阳,有一个细节让人忧心(吉林舒兰封城)
- 1天密接者猛增77人,患者轨迹透露危险信号 吉林市全面封闭管理(1天密接者猛增77人)
- 吉林舒兰 封城 15人确诊 276人隔离,出现跨省传播(吉林舒兰封城)
- 四月新番CP人气榜公布,《剃须》两度上榜,沙优不是女朋友(四月新番CP人气榜公布)
- 2019年外媒秋季新番动画角色CP排行榜,桐人和爱丽丝落榜(2019年外媒秋季新番动画角色CP排行榜)
热门推荐
- php静态类和动态类的区别(PHP Trait代码复用类与多继承实现方法详解)
- vue双向数据绑定js如何实现(纯JS如何实现vue.js下的双向绑定功能)
- dedecms提示怎么去除(DEDECMS实现禁止游客发表评论)
- docker redis配置文件放哪里(最详细的docker中安装并配置redis图文详解)
- Uncaught RangeError: Maximum call stack size exceeded的常见原因
- iis运行php程序(Windows2003+IIS7 Express使用FastCgi运行php)
- sql server批量导出数据(SQL Server 批量插入数据的完美解决方案)
- dedecms标签解析(解决DEDECMS采集文章待审核后仍列表显示)
- python网页自动化selenium(python利用selenium进行浏览器爬虫)
- python实现删除列表重复元素功能(Python实现删除排序数组中重复项的两种方法示例)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9