下載吧 - 綠色安全的游戲和軟件下載中心

軟件下載吧

當前位置:軟件下載吧 > 數據庫 > MS_SQL > SQL開發知識:sql server把退款總金額拆分到盡量少的多個訂單中詳解

SQL開發知識:sql server把退款總金額拆分到盡量少的多個訂單中詳解

時間:2024-02-13 10:23作者:下載吧人氣:22

一、問題

原來有三個充值訂單,現在要退款450元,如何分配才能讓本次退款涉及的充值訂單數量最少?具體數據參考下圖:

SQL開發知識:sql server把退款總金額拆分到盡量少的多個訂單中詳解

二、解決方案

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

標簽MSSQL,SQLServer,技術文檔,數據庫,SQLSERVER

相關下載

查看所有評論+

網友評論

網友
您的評論需要經過審核才能顯示

熱門閱覽

最新排行

公眾號

主站蜘蛛池模板: 欧美黑人性暴力猛交喷水| 欧美亚洲国产精品久久高清| 朱竹清被吸乳羞羞漫画| 婷婷五月综合缴情在线视频| 成人精品一区二区三区校园激情| 国产美女在线免费观看| 国产一区二区三区在线观看视频| 亚洲日韩精品国产一区二区三区| 亚洲成年网站在线观看| 91精品久久久| 精品欧美一区二区三区在线观看| 最近中文字幕电影大全免费版| 天堂网www中文在线| 国产∨亚洲v天堂无码久久久| 久久久www成人免费精品| 又粗又硬又爽的三级视频| 篠田优在线播放| 日本b站一卡二不卡三卡四卡| 国产精品v欧美精品v日韩精品| 伊人久久中文字幕| 中文字幕一区日韩在线视频| 黑人狠狠的挺身进入| 欧美日韩北条麻妃一区二区| 好爽~好大~不要| 厨房掀起馊子裙子挺进去| 久久精品久噜噜噜久久| 2019中文字幕无线乱码| 特级做a爰片毛片免费看无码| 成全高清视频免费观看| 免费观看的a级毛片的网站| 久久97久久97精品免视看 | 韩国一级做a爱性色毛片| 欧美日韩一区二区三区四区 | 国产欧美日韩一区二区加勒比| 人人妻人人澡人人爽人人dvd| 中文国产成人精品少久久| 色综合五月婷婷| 日本高清在线播放| 国产探花在线视频| 亚洲av色影在线| 日本亚州视频在线八a|