时间:2021-05-23
本文介绍了计算多个订单的核销金额的全部过程,运行数据库环境:SQL SERVER 2005,下面跟大家分享一下。
下图是一张订单明细表,现有金额要1700,根据订单单号的顺序依次对订单金额进行核销。
到支付订单6时,支付金额不足,只能支付200,后面订单的核销金额为0。
1.基础数据准备
CREATE TABLE #t ( id INT ,dingdan VARCHAR(20),sale MONEY) INSERT INTO #t VALUES (1,'a',100);INSERT INTO #t VALUES (2,'b',200); INSERT INTO #t VALUES (3,'c',300); INSERT INTO #t VALUES (4,'d',400); INSERT INTO #t VALUES (5,'e',500); INSERT INTO #t VALUES (6,'f',600); INSERT INTO #t VALUES (7,'g',700);INSERT INTO #t VALUES (8,'h',800);INSERT INTO #t VALUES (9,'i',900);INSERT INTO #t VALUES (10,'j',1000);解题思路如下:
先计算出在每个订单之前总共要核销的金额数,然后加上本次将要核销的订单金额,跟1700比较,
如果总和小于等于1700,那么,这个订单的订单金额可以全部核销,否则,只能核销部分,
即1700-本订单之前的所有订单金额之和。
;WITH x1 AS ( SELECT t1.id , t1.dingdan , t1.sale , ( SELECT ISNULL(SUM(t2.sale), 0) FROM #t t2 WHERE t2.id < t1.id ) AS curr_sale_sum--本订单之前的所有订单金额 FROM #t t1 ), x2 AS ( SELECT id , dingdan , sale , CASE WHEN curr_sale_sum + sale <= 1700 THEN sale ELSE 1700 - curr_sale_sum END AS new_sale FROM x1 ) SELECT id AS 序号, dingdan 订单, sale 订单金额, CASE WHEN new_sale < 0 THEN 0 ELSE new_sale END AS 核销金额 FROM x2由于不能用分析函数来解题,只好用标量子查询实现相同的效果。当然,提供的数据有一定的局限性,
如果序号不是连续的,直接套用我的SQL无法解决,需要自己生成一个连续的序号。
结果如下:
以上就是关于计算多个订单的核销金额的全部解题思路,希望对大家的学习有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
亲,电子凭证订单无法核销有以下场景,建议您根据提示排查:1、提示:卖家未授权当前核销帐号主账号:由于核销库删除了导致无法核销,请您进入已卖出的宝贝-订单详情页面
亲,关于如何提升核销率,1、每天关注数据看板,下载送货入户并安装:服务履行里面没有核销的订单。然后核销掉,第二天数据就达标了。2、在千牛消息中心查看当天实时确认
亲,当电子凭证核销码在可核销状态时(即核销码未核销),订单的商品设置了支持“过期自动退款”,码过期后的24小时系统自动执行退款,退款中不允许卖家拒绝(卖家无拒绝
快团团的团长在完成订单的发货或买家自提之后,都需要对订单进行核销,才可以完成订单结算流程。订单进行核销之后能够帮助团长分清哪些顾客提货了,哪些还没有提货。现在快
负责电子口岸网上申领核销单,并到外汇管理局申领。根据订单或是合专同,编制合同号属,建立客户资料档案,包括客户名称、品名、数量、金额、付款方式、起运港、目的港、唛