我有一個有 2 列的表 temp
create table temp
(
id int identity(1,1),
amount decimal(18,2)
)
示例資料插入如下
insert into temp(amount)
values (100), (200), (500)
表看起來像
id amount
-----------
1 100
2 200
3 500
我想要實作的是,如果假設我們從表中扣除 150 的金額,那么扣除應該按照 ID 的順序進行。這意味著 id 1 的數量將為 0(100-150 =0,剩余為 50),然后 id 2 的數量將為 150(之前扣除的余額 50 必須從 200 減少)
所以結果資料集應該是
id amount
---------
1 0
2 150
3 500
uj5u.com熱心網友回復:
所有先前記錄的視窗累積總和,保存到 cte 以進行別名:
create table #a(id int,amount int)
insert #a values(1,100),(2,200),(3,500)
select * from #a
declare @sub int=150
;with cte as
(
select id,amount,isnull(sum(amount) over (order by id rows between unbounded preceding and 1 preceding),0) as prev_sum
from #a
)
select *,case
when @sub-prev_sum>amount then 0
when @sub-prev_sum>0 then amount-(@sub-prev_sum)
else amount
end
from cte
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/474577.html
上一篇:限制基于1列的結果
