数据表中,对上条记录进行操作

本文通过两个具体案例展示了如何使用SQL语句实现累计求和,包括如何为每一期的单据计算期末余额,以及如何计算每个月的累计总额。

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

有如下表

客户代码 客户名称 单据日期 本期应收 本期应付
01 北京 2004-1-1 1000 0
01 北京 2004-2-1 100 0
01 北京 2004-3-1 0 200
01 北京 2004-4-1 500 200
01 北京 2004-5-1 500 0

02 上海 2004-1-1 0 2000
02 上海 2004-2-1 100 0
02 上海 2004-3-1 0 200
02 上海 2004-4-1 500 200
02 上海 2004-5-1 500 0

我想要得到如下效果:其中(期末余额=上期期末余额+本期应收-本期应付)

客户代码 客户名称 单据日期 本期应收 本期应付 期末余额
01 北京 2004-1-1 1000 0 1000
01 北京 2004-2-1 100 0 1100
01 北京 2004-3-1 0 200 900
01 北京 2004-4-1 500 200 1200
01 北京 2004-5-1 500 0 1700

02 上海 2004-1-1 0 2000 -2000
02 上海 2004-2-1 100 0 -1900
02 上海 2004-3-1 0 200 -2100
02 上海 2004-4-1 500 200 -1800
02 上海 2004-5-1 500 0 -1300

设计如下:

create table 表(客户代码 varchar(10),客户名称 varchar(10),单据日期 datetime,本期应收 int,本期应付 int)
insert 表 select '01 ', '北京 ', '2004-1-1 ',1000,0
union all select '01 ', '北京 ', '2004-2-1 ',100 ,0
union all select '01 ', '北京 ', '2004-3-1 ',0 ,200
union all select '01 ', '北京 ', '2004-4-1 ',500 ,200
union all select '01 ', '北京 ', '2004-5-1 ',500 ,0
union all select '02 ', '上海 ', '2004-1-1 ',0 ,2000
union all select '02 ', '上海 ', '2004-2-1 ',100 ,0
union all select '02 ', '上海 ', '2004-3-1 ',0 ,200
union all select '02 ', '上海 ', '2004-4-1 ',500 ,200
union all select '02 ', '上海 ', '2004-5-1 ',500 ,0

select *,期末余额=(select sum(本期应收-本期应付) from 表 where 客户代码=a.客户代码 and 单据日期 <=a.单据日期)
from 表 a

<!--StartFragment -->
现在我有一个表,如下
ID 日期   上月累计  
1   2010-5 50
1 2010-6 55
1 2010-7 60
2 2010-6 50
2 2010-7 40
想得到以下效果
ID 日期   上月累计  总计
1   2010-5 50    50  
1 2010-6 55    105
1 2010-7 60    165
2 2010-6 50    50
2 2010-7 40    90
SQL语句如下
create table t11
(
ID int null,
日期 DATETIME NULL,
上月累计 INT NULL
)

INSERT INTO t11
select 1,2010-5, 50
union
select 1,2010-6,55
union
select 1 ,2010-7 ,60
union
select 2 ,2010-6, 50
union
select 2 ,2010-7 ,40
select *,总计=(select sum(上月累计) from t11 where t11.ID=a.ID AND t11.日期<=a.日期 )
from t11 a
结果如下:
<!--StartFragment -->
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值