我给公司用VB+SQL 开发一个类似于用友财务软件的管理系统,其中里面有个功能需要用到存储过程,求余款,例如:
日期 客户名称 应收货款 实收货款 余款
2005-05-10 A 10000 9000 -1000
2005-05-10 B 5000 3200 -1800
2005-05-11 A 8000 7500 -1500
2005-05-11 B 7000 6000 -2500
2005-05-12 A 9000 10000 -500
2005-02-12 B 5600 6000 -2100
2005-05-13 A 5000 3000 -2500
2005-05-13 C 8000 7000 -1000
2005-05-14 B 5000 6000 -1100
2005-05-14 C 6000 3000 -4000
要求按客户名称进行筛选,
第一条记录的(A):余款 =(A) 应收货款 - (A) 实收货款
第二条记录的(A):余款 = (A第一条记录的)余款 + (A第二条记录的)应收货款 - (A第二条记录的)实收货款
第三条记录的(A):余款 = (A第二条记录的)余款 + (A第三条记录的)应收货款 - (A第三条记录的)实收货款第一条记录的(B):余款 =(B) 应收货款 - (B) 实收货款
第二条记录的(B):余款 = (B第一条记录的)余款 + (B第二条记录的)应收货款 - (B第二条记录的)实收货款
第三条记录的(B):余款 = (B第二条记录的)余款 + (B第三条记录的)应收货款 - (B第三条记录的)实收货款第一条记录的(C):余款 =(C) 应收货款 - (C) 实收货款
第二条记录的(C):余款 = (第一条记录的)余款 + (C第二条记录的)应收货款 - (C第二条记录的)实收货款
第三条记录的():余款 = (第二条记录的)余款 + (C第三条记录的)应收货款 - (C第三条记录的)实收货款如果新增一条记录,客户名称为(A),保存的时候,系统就会先查询(A客户)上次的余款+本次的(应收货款)-本次的(实收货款)=本次的(余款) 进行保存,如此类推客户(B,C,D ......)都可以
日期 客户名称 应收货款 实收货款 余款
2005-05-10 A 10000 9000 -1000
2005-05-10 B 5000 3200 -1800
2005-05-11 A 8000 7500 -1500
2005-05-11 B 7000 6000 -2500
2005-05-12 A 9000 10000 -500
2005-02-12 B 5600 6000 -2100
2005-05-13 A 5000 3000 -2500
2005-05-13 C 8000 7000 -1000
2005-05-14 B 5000 6000 -1100
2005-05-14 C 6000 3000 -4000
要求按客户名称进行筛选,
第一条记录的(A):余款 =(A) 应收货款 - (A) 实收货款
第二条记录的(A):余款 = (A第一条记录的)余款 + (A第二条记录的)应收货款 - (A第二条记录的)实收货款
第三条记录的(A):余款 = (A第二条记录的)余款 + (A第三条记录的)应收货款 - (A第三条记录的)实收货款第一条记录的(B):余款 =(B) 应收货款 - (B) 实收货款
第二条记录的(B):余款 = (B第一条记录的)余款 + (B第二条记录的)应收货款 - (B第二条记录的)实收货款
第三条记录的(B):余款 = (B第二条记录的)余款 + (B第三条记录的)应收货款 - (B第三条记录的)实收货款第一条记录的(C):余款 =(C) 应收货款 - (C) 实收货款
第二条记录的(C):余款 = (第一条记录的)余款 + (C第二条记录的)应收货款 - (C第二条记录的)实收货款
第三条记录的():余款 = (第二条记录的)余款 + (C第三条记录的)应收货款 - (C第三条记录的)实收货款如果新增一条记录,客户名称为(A),保存的时候,系统就会先查询(A客户)上次的余款+本次的(应收货款)-本次的(实收货款)=本次的(余款) 进行保存,如此类推客户(B,C,D ......)都可以
你给这个表设置一个id,然后你要做这个操作的时候,首先找到id最大的a客户,然后做一个运算后插入就好了啊!
id最大的问题可以使用 order by id desc 来实现了!
2005-05-10 B 5000.00 3200.00 -1800.00 2
2005-05-11 A 8000.00 7500.00 -1500.00 3
2005-05-11 B 7000.00 6000.00 -2500.00 4
2005-05-12 A 9000.00 10000.00 -500.00 5
2005-02-12 B 5600.00 6000.00 -2100.00 6
2005-05-13 A 5000.00 3000.00 -2500.00 7
2005-05-13 C 8000.00 7000.00 -1000.00 8
2005-05-14 B 5000.00 6000.00 -1100.00 9
2005-05-14 C 6000.00 3000.00 -4000.00 10比如现在要加A客户,我们可以使用这个语句:
select top 1 * from yk where 客户名称='a' order by id desc
得到这个查询结果:日期 客户名称 应收货款 实收货款 余款 ID2005-05-13 A 5000.00 3000.00 -2500.00 7从查询结果里面我们可以得到余款为 -2500.00,记录到变量 YK 里面(如果a客户在数据库中不存在,也就是说查询结果为空的话,那么得到的YK 就为0!)
假设A客户现在又增加 应收货款 4000.00 ,其中实收为 3600.00 ,而这两个数值是我们知道的,那么我们就可以写如下语句往数据库里面添加一条记录:
insert into yk values('2005-05-19','A',4000,3600,-2500+4000-3600)
其中 '2005-05-19' 是我们知道的时间,客户名称是我们知道的,4000和3600都是我们知道的,最后一个 -2500+4000-3600 在程序中就可以这样写:
yk+4000-3600