34,597
社区成员
发帖
与我相关
我的任务
分享
--试一下这种.
DECLARE @t TABLE(Dt DateTime Primary Key,PreAmt INT,Amt1 INt,Amt2 INT,TotalAmt INT)
INSERT INTO @t
SELECT
'2008-9-25 00:00:00' ,0,12,12,24 UNION ALL SELECT
'2008-9-25 00:00:01' ,24,3,2,29 UNION ALL SELECT
'2008-9-25 00:01:00',29,4,-2,31 UNION ALL SELECT
'2008-9-25 01:00:00' ,31,2,2,35
DECLARE @FixDate DATETIME --修改的日期
DECLARE @PreAmt INT,
@TotalAmt INT
SET @FixDate='2008-9-25 00:00:01'
select * from @t
UPDATE @t SET Amt1=7 WHERE Dt=@FixDate
UPDATE @t
SET @PreAmt=IsNULL(@PreAmt,PreAmt)+Amt1+Amt2,
TotalAmt=@PreAmt,
PreAmt=@PreAmt-Amt1-Amt2
WHERE dt>=@FixDate
SELECT * FROM @t
/*
--修改前
Dt PreAmt Amt1 Amt2 TotalAmt
------------------------------------------------------ ----------- ----------- ----------- -----------
2008-09-25 00:00:00.000 0 12 12 24
2008-09-25 00:00:01.000 24 3 2 29
2008-09-25 00:01:00.000 29 4 -2 31
2008-09-25 01:00:00.000 31 2 2 35
--修改後
Dt PreAmt Amt1 Amt2 TotalAmt
------------------------------------------------------ ----------- ----------- ----------- -----------
2008-09-25 00:00:00.000 0 12 12 24
2008-09-25 00:00:01.000 24 7 2 33
2008-09-25 00:01:00.000 33 4 -2 35
2008-09-25 01:00:00.000 35 2 2 39
*/
create table tb (日期 datetime,上期余额 int,现金1 int,现金2 int,本期余额 int)
insert into tb values('2008-9-25 00:00:00' ,0,12,12,24)
insert into tb values('2008-9-25 00:00:01' ,24,3,2,29 )
insert into tb values('2008-9-25 00:01:00' ,29,4,-2,31)
insert into tb values('2008-9-25 01:00:00' ,31,2,2,35)
go
--原始数据
select * from tb
/*
日期 上期余额 现金1 现金2 本期余额
------------------------------------------------------ ----------- ----------- ----------- -----------
2008-09-25 00:00:00.000 0 12 12 24
2008-09-25 00:00:01.000 24 3 2 29
2008-09-25 00:01:00.000 29 4 -2 31
2008-09-25 01:00:00.000 31 2 2 35
(所影响的行数为 4 行)
*/
--例如:将2)修改为: 2)2008-9-25 00:00:01 ,24,4,2,30
update tb set 现金1 = 4 where 日期 = '2008-9-25 00:00:01'
--修改其他数据
update tb
set 上期余额 =
isnull((select sum(现金1) from tb where 日期 < t.日期),0) +
isnull((select sum(现金2) from tb where 日期 < t.日期),0) ,
本期余额 =
isnull((select sum(现金1) from tb where 日期 <= t.日期),0) +
isnull((select sum(现金2) from tb where 日期 <= t.日期),0)
from tb t
--查询修改后的数据
select * from tb
/*
日期 上期余额 现金1 现金2 本期余额
------------------------------------------------------ ----------- ----------- ----------- -----------
2008-09-25 00:00:00.000 0 12 12 24
2008-09-25 00:00:01.000 24 4 2 30
2008-09-25 00:01:00.000 30 4 -2 32
2008-09-25 01:00:00.000 32 2 2 36
(所影响的行数为 4 行)
*/
drop table tb
update tb set
上期余额 =
isnull((select sum(现金1) from tb where 日期 < t.日期),0) +
isnull((select sum(现金2) from tb where 日期 < t.日期),0) ,
本期余额 =
isnull((select sum(现金1) from tb where 日期 <= t.日期),0) +
isnull((select sum(现金2) from tb where 日期 <= t.日期),0)
from tb t
create table tb (日期 datetime,上期余额 int,现金1 int,现金2 int,本期余额 int)
insert into tb values('2008-9-25 00:00:00' ,0,12,12,24)
insert into tb values('2008-9-25 00:00:01' ,24,3,2,29 )
insert into tb values('2008-9-25 00:01:00' ,29,4,-2,31)
insert into tb values('2008-9-25 01:00:00' ,31,2,2,35)
go
--原始数据
select * from tb
/*
日期 上期余额 现金1 现金2 本期余额
------------------------------------------------------ ----------- ----------- ----------- -----------
2008-09-25 00:00:00.000 0 12 12 24
2008-09-25 00:00:01.000 24 3 2 29
2008-09-25 00:01:00.000 29 4 -2 31
2008-09-25 01:00:00.000 31 2 2 35
(所影响的行数为 4 行)
*/
--例如:将2)修改为: 2)2008-9-25 00:00:01 ,24,4,2,30
update tb set 现金1 = 4 where 日期 = '2008-9-25 00:00:01'
select 日期 ,
上期余额 =
isnull((select sum(现金1) from tb where 日期 < t.日期),0) +
isnull((select sum(现金2) from tb where 日期 < t.日期),0) ,
现金1 ,
现金2 ,
本期余额 =
isnull((select sum(现金1) from tb where 日期 <= t.日期),0) +
isnull((select sum(现金2) from tb where 日期 <= t.日期),0)
from tb t
/*
日期 上期余额 现金1 现金2 本期余额
------------------------------------------------------ ----------- ----------- ----------- -----------
2008-09-25 00:00:00.000 0 12 12 24
2008-09-25 00:00:01.000 24 4 2 30
2008-09-25 00:01:00.000 30 4 -2 32
2008-09-25 01:00:00.000 32 2 2 36
(所影响的行数为 4 行)
*/
drop table tb
update tb set 本期余额=本期余额+1,现金1=现金1+1
where 日期>所修改紀錄的日期