逐行更新資料,滿足條件後終止 葉子

2021-08-25 19:54:01 字數 1633 閱讀 3555

需求貼:

--要求說明

例如下表中有充值記錄,每個人可能充值多次,當消費的時候,根據消費金額更新充值記錄

例如張三充值3次,分別為17,2,12,假設其消費22元,則更新為0,0,9 就是說17和2的兩筆錢花完了,12那筆錢還剩9元。如果消費18元,則更新為0,1,12。如果消費了13元,則變成4,2,12。

--測試資料

declare @info table

(編號int,姓名varchar(4),金額int)

insert into @info

select 1,

'張三',17 union

all

select 2,

'李四',210 union

all

select 3,

'張三',2 union

all

select 4,

'李四',12 union

all

select 5,

'張三',12

--張三消費22

declare @i int

;set @i=22

update @info

set @i=

case

when @i<0 then 0 else @i-金額end,

金額=case when @i>0 then 0 when @i=0 then 金額else -@i end

where 姓名='張三'

select *

from @info

/*編號 姓名 金額

----------- ---- -----------

1 張三 0

2 李四 210

3 張三 0

4 李四 12

5 張三 9

*/首先感謝freedom0227,發現我上面的**並不適用於所有的情況。

現換了思路重新寫了乙個:

declare @infomation table (編號 int,姓名 varchar(4),金額 int) insert into @infomation select 1,'張三',17 union all select 2,'李四',210 union all select 3,'張三',2 union all select 4,'李四',12 union all select 5,'張三',12 --張三消費22 declare @i int;set @i=19 declare @j int;declare @k int ;with maco as ( select * from @infomation where 姓名='張三'),maco1 as( select *,總金額=(select sum(金額) from maco where 編號<=a.編號) from maco a) select top 1 @j=編號,@k=總金額-@i from maco1 where 總金額》=@i update @infomation set 金額=@k where 編號=@j update @infomation set 金額=0 where 姓名='張三' and 編號<@j select * from @infomation /* 編號 姓名 金額 ----------- ---- ----------- 1 張三 0 2 李四 210 3 張三 0 4 李四 12 5 張三 12 */

逐行更新資料,滿足條件後終止 葉子

需求貼 要求說明 例如下表中有充值記錄,每個人可能充值多次,當消費的時候,根據消費金額更新充值記錄 例如張三充值 3次,分別為 17,2,12 假設其消費 22元,則更新為 0,0,9 就是說17和2 的兩筆錢花完了,12那筆錢還剩 9元。如果消費 18元,則更新為 0,1,12 如果消費了 13元...

儲存過程,更新滿足條件的資料

將aaa表中日期為 2010 04 02 的資料的fd empname更新成與為 2010 04 02 的fd empname的一樣 create or replace procedure updatebydate iscursor nw is select from aaa where fd da...

標記滿足條件的資料 玩轉Excel資料

在 excel 做完之後,我們可能會遇到需要特別備註的事情。比如說在一張學生成績表中某些學生的成績為零,但出現這種情況的原因有很多,比如可能是這位同學考試作弊了。那麼遇到這種特殊情況我們就得備註。可是一張 中的資料很多,怎麼樣才能從千千萬萬的資料中找到這些滿足條件的資料,然後進行備註呢?更多 玩轉e...