同一张表内、利用变化的上一行数据动态地修改下一行数据(示例Demo)

本文介绍了一种在SQL中利用前一行数据动态更新后一行数据的方法。通过创建临时表并使用游标遍历的方式,实现了根据当前行的数据调整下一行预估费用的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

--同一张表内、利用变化的上一行数据动态地修改下一行数据(示例Demo)

/**//*
CREATETABLEAccount(
[Month][datetime]NOTNULLPrmaryKey,
[PlanFare][money]NULL,
[PutoutFare][money]NULL,
[PlanPreFare][money]NULL,
[PutoutPreFare][money]NULL
)--Account表生成脚本
*/


selectidentity(int,1,1)as[id],*into#fromaccountorderby[month]asc

CREATETABLE#Temp(
[id][int]NOTNULL,
[Month][datetime]NOTNULL,
[PlanFare][money]NULL,
[PutoutFare][money]NULL,
[PlanPreFare][money]NULL,
[PutoutPreFare][money]NULL
)

declare@idint
declaremcursorforselect[id]from#orderby[id]asc
openm
fetchnextfromminto@id
while(@@fetch_status=0)
begin
insertinto#Temp([id],[Month],PlanFare,PutoutFare,PlanPreFare,PutoutPreFare)
select[id],[Month],PlanFare,PutoutFare,PlanPreFare,PutoutPreFarefrom#where[id]=@id

UPDATE#
SET#.PlanPreFare=(a.PlanFare-a.putoutFare)+(a.PlanPreFare-a.putoutPreFare)
FROM#TempASa
WHERE#.[id]=a.[id]+1
--前行作依据,后行来修改(此次的后行,变成下次的前行,依此循环,直至表中的行遍历结束)
truncatetable#Temp
fetchnextfromminto@id
end
closem
deallocatem


UPDATEAccount
SETAccount.PlanPreFare=a.PlanPreFare
FROM#ASa
WHEREAccount.[Month]=a.[Month]


droptable#
droptable#Temp


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值