日韩小视频-日韩久久一区二区三区-日韩久久一级毛片-日韩久久久精品中文字幕-国产精品亚洲精品影院-国产精品亚洲欧美云霸高清

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

軟件下載吧

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

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

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

一、問題

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

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

二、解決方案

Step 1:對可退金額進行降序排列,以便優(yōu)先使用可退金額比較大的訂單

Step 2:使用CTE公用表達式,實現(xiàn)類似for或while循環(huán)或游標(biāo)的功能

三、腳本

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 可發(fā)起退款, 0 待退
from #t
),
cte2 as
(
select rn, 充值, 已退, 可退,
可發(fā)起退款 = case when @i要退 > 可退 then 可退 else @i要退 end,
待退 = @i要退 – case when @i要退 > 可退 then 可退 else @i要退 end — 待退 = 要退 – 可發(fā)起退款
from cte1
where rn = 1
union all
select t2.rn, t2.充值, t2.已退, t2.可退,
可發(fā)起退款 = 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

標(biāo)簽MSSQL,SQLServer,技術(shù)文檔,數(shù)據(jù)庫,SQLSERVER

相關(guān)下載

查看所有評論+

網(wǎng)友評論

網(wǎng)友
您的評論需要經(jīng)過審核才能顯示

熱門閱覽

最新排行

公眾號

主站蜘蛛池模板: 亚洲欧美日本综合一区二区三区 | 亚洲国产精品不卡毛片a在线 | 又黄又免费 | 国产美女又黄又爽又色视频免费 | 中文字幕亚洲日本岛国片 | 国产日本欧美在线观看 | 成人国产精品一级毛片视频 | 欧美成人性动漫在线观看 | 免费三级毛片 | 国产午夜永久福利视频在线观看 | 久草在线青青草 | 美日韩一区二区 | 成人a一级毛片免费看 | 黄网站在线播放视频免费观看 | 亚洲图片一区二区三区 | 欧美一区二区不卡视频 | 国产高清在线免费视频 | 国产三级日产三级日本三级 | a级毛片在线播放 | 日本理论片免费高清影视在线观看 | 日本欧美做爰全免费的视频 | 国产做a爰片久久毛片 | 国产精品欧美亚洲韩国日本不卡 | 亚洲精品二区中文字幕 | 欧美日产国产亚洲综合图区一 | 亚洲天堂一区二区 | 亚洲成人免费网站 | 色婷婷久久综合中文久久蜜桃 | 日韩精品一区二区三区免费视频 | 久久精品国产一区二区三区不卡 | 欧美在线一级片 | 国产精品分类视频分类一区 | 亚洲国产精品成人综合久久久 | 自拍偷在线精品自拍偷无码专区 | 九九九热在线精品免费全部 | 依人九九 | 怡红院免费全部视频在线视频 | 日韩国产成人资源精品视频 | 久久免费精品国产72精品剧情 | 色一情| 精品国产理论在线观看不卡 |