SQL中如何循环计算

[复制链接]
查看11 | 回复2 | 2021-1-27 05:17:21 | 显示全部楼层 |阅读模式

我想把上图中的余额在SQL中用语句直接写成出来
其中余额字段是查询表时增加的字段,其它字段都是直接取的值
计算方式是:O2=O1+M2+N2
O3=O2+M3+N3
后面以此类推
当第一行没有上期余额这部分怎么处理?
如果写函数要怎么写?
如果不用写函数要如何写?
分 -->
回复

使用道具 举报

千问 | 2021-1-27 05:17:21 | 显示全部楼层
withdata(_index,add_amount,red_amount)as
(
select1,0,-3080unionall
select2,3003,0unionall
select3,0,-154unionall
select4,77,0unionall
select5,0,40unionall
select6,0,-1580unionall
select7,1540,0
)
--select*fromdata
selectdata.*,rest=(selectsum(add_amount)+sum(red_amount)fromdatadata2wheredata2._indexDECLARE@tTABLE(序号INTNOTNULL,增加DECIMAL(10,2)NOTNULL,减少DECIMAL(10,2)NOTNULL)
INSERT@t(序号,增加,减少)
VALUES(1,40557,-9736),(2,61185,-89882),(3,90955,-59306),
(4,65656,-79207),(5,22674,-21292),(6,84536,-72462),
(7,72849,-68889),(8,58352,-42120),(9,38306,-55301),
(10,7283,-27803),(11,80728,-34710),(12,58263,-82854),
(13,32959,-85673),(14,51437,-93619),(15,38617,-96284)
;WITHtAS(SELECT*,CONVERT(DECIMAL(10,2),增加+减少)余额FROM@tWHERE序号=1
UNIONALL
SELECTt2.*,
CONVERT(DECIMAL(10,2),t2.增加+t2.减少+t.余额)
FROM@tt2
INNERJOINtONt2.序号=t.序号+1)
SELECT*FROMt;


回复

使用道具 举报

千问 | 2021-1-27 05:17:21 | 显示全部楼层
用游标处理就比较简单,只是速度不是很快
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行