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

2021-06-16 05:35:49 字數 2023 閱讀 5625

需求貼:

--要求說明

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

例如張三充值

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

select1,'

張三',17 union

allselect2,'

李四',210 union

allselect3,'

張三',2 union

allselect4,'

李四',12 union

allselect5,'

張三',12

--張三消費

22declare

@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張三

02李四2103張三

04李四125張三

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元,則變成4,2,1...

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

將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...