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退款总金额拆分到订单内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
您可能感兴趣
- microsoftsqlserver官网(Microsoft SQL Server数据库各版本下载地址集合)
- sqlserver语句创建窗口布局(SQL Server 2012 开窗函数)
- SqlServer中如何解决session阻塞问题(SqlServer中如何解决session阻塞问题)
- sqlserver分组查询(sql server如何利用开窗函数over进行分组统计)
- sqlserver调试存储过程(sql server2008调试存储过程的完整步骤)
- 修改sqlserver数据库所有者
- sqlserver降序排列(SQL SERVER临时表排序问题的解决方法)
- sql server导入数据csv文件(大容量csv快速内导入sqlserver的解决方法推荐)
- sqlserver数据库技术及应用教程(SQLServer2019 数据库的基本使用之图形化界面操作的实现)
- sqlserver改表结构不允许(SQL Server阻止保存修改表结构的解决方法)
- sqlserver登录身份验证(SQL Server 2012 身份验证Authentication)
- sqlserver删除表的第一行数据(sql server删除前1000行数据的方法实例)
- sqlserver备份整表数据的语句(SqlServer批量备份多个数据库且删除3天前的备份)
- sqlserver统计表大小(SqlServer 垂直分表减少程序改动)
- navicat如何连接sql数据库(Navicat 连接SQLServer数据库图文步骤)
- sqlserver拒绝访问怎么办(SQL server服务显示远程过程调用失败的解决方法)
- 一道高中题-求杯子的高度(一道高中题-求杯子的高度)
- 网坛停摆三巨头亏损惨重,费德勒跌幅88 纳达少赚2400万(网坛停摆三巨头亏损惨重)
- Beyond 版本《无人深空》主线任务攻略 阿特拉斯之道(版本无人深空主线任务攻略)
- 全球科技界最有钱大佬TOP 15 你知道几位(全球科技界最有钱大佬TOP)
- 2主力后腰缺阵 泰山队奇兵有望获重用,赛季0出场,迎来中超首秀(泰山队奇兵有望获重用)
- 三分71 生死战爆发 篮网旧将丁威迪今天成奇兵,助队赢球(三分71生死战爆发)
热门推荐
- response的contentType的类型值
- C#中TryParse的用法
- linux中pwd怎么用(WDCP控制面板的常用linux命令集)
- python散点图(python scatter散点图用循环分类法加图例)
- mysql底层原理是什么(MySQL 页完全指南—浅入深出页的原理)
- dedecms标签怎么用(浅析DedeCMS GBK版安装sphinx全文索引无法查询无结果的解决方法)
- stopPropagation、return false、preventDefault区别
- ftp两种传输协议有什么区别(FTP与SFTP的区别 知多少)
- 如何使用github中的python库(使用GitHub和Python实现持续部署的方法)
- 如何用python爬取最新电影(详解Python爬取并下载《电影天堂》3千多部电影)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9