现在我有张账本表 T_Account
字段为: A(表示上月剩余金额)B(本月支出),C(表示本月剩余金额=A-B)D(日期都放每月的1号)
A B C D
1000 500 500 2009-2-1
500 200 300 2009-3-1
300 100 200 2009-4-1
现在如果更新第一条记录的C字段话比如更新成为800 实际是B字段的数据做了修改改为200了
这样就需要得到下面的结果
A B C D
1000 200 800 2009-2-1
800 200 600 2009-3-1
600 100 500 2009-4-1现在遇到的问题就是 有可能 C 字段可能会被更新,这样就影响到下月的A字段,和C字段
所以想通过监视C字段的更新来更新之后月份的A和C的值不知道通过触发器能实现吗,大家帮忙指点下~
字段为: A(表示上月剩余金额)B(本月支出),C(表示本月剩余金额=A-B)D(日期都放每月的1号)
A B C D
1000 500 500 2009-2-1
500 200 300 2009-3-1
300 100 200 2009-4-1
现在如果更新第一条记录的C字段话比如更新成为800 实际是B字段的数据做了修改改为200了
这样就需要得到下面的结果
A B C D
1000 200 800 2009-2-1
800 200 600 2009-3-1
600 100 500 2009-4-1现在遇到的问题就是 有可能 C 字段可能会被更新,这样就影响到下月的A字段,和C字段
所以想通过监视C字段的更新来更新之后月份的A和C的值不知道通过触发器能实现吗,大家帮忙指点下~
1000 500 2009-2-1
500 200 2009-3-1
300 100 2009-4-1
1000 500 2009-2-2
500 200 2009-3-2
300 100 2009-4-2就是说每天都可以写入数据,然后通过SQL得到你要的查询即可.
create table tb(A int, B int, D datetime)
insert into tb values(1000 , 500 , '2009-2-1')
insert into tb values(500 , 200 , '2009-3-1')
insert into tb values(300 , 100 , '2009-4-1')
insert into tb values(1000 , 500 , '2009-2-2')
insert into tb values(500 , 200 , '2009-3-2')
insert into tb values(300 , 100 , '2009-4-2')
go--每天的累计
select D , A , B ,
C = (select sum(A - B) from tb where d <= t.d)
from tb t
order by t.d
/*
D A B C
----------------------- ----------- ----------- -----------
2009-02-01 00:00:00.000 1000 500 500
2009-02-02 00:00:00.000 1000 500 1000
2009-03-01 00:00:00.000 500 200 1300
2009-03-02 00:00:00.000 500 200 1600
2009-04-01 00:00:00.000 300 100 1800
2009-04-02 00:00:00.000 300 100 2000(6 行受影响)
*/--每月的累计
select convert(varchar(7),D ,120) D,
sum(A) A,
sum(B) B,
C = (select sum(A -B) from tb where convert(varchar(7),D ,120) <= convert(varchar(7),t.D ,120))
from tb t
group by convert(varchar(7),D ,120)
/*
D A B C
------- ----------- ----------- -----------
2009-02 2000 1000 1000
2009-03 1000 400 1600
2009-04 600 200 2000(3 行受影响)
*/
drop table tb