需求貼:
--要求說明
例如下表中有充值記錄,每個人可能充值多次,當消費的時候,根據消費金額更新充值記錄
例如張三充值
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...