• 全部
  • 基础类
  • 应用实例
  • 新技术前沿

请教这个语句应该怎么写?达人请进~~~

冷箫轻笛 中集集团 智能制造系统高级经理  2004-05-10 11:36:56
程序有一个帐目表,结构为
BSL(标识列)PZH(凭证号) CZJE(操作金额) BQJE(本期金额)
------- -------------- ------------------- ------------------
4 0000000000 5924619.3200 6047580.3200
5 0403240001 5011.2000 6052591.5200
6 0403240002 15.0000 6052606.5200
7 0403240003 12162.0000 6064768.5200
8 0403240004 5346.0000 6070114.5200
9 0403240005 8623.8000 6078738.3200
10 0403240006 6280.0000 6085018.3200
11 0403240007 12384.0000 6097402.3200
12 0403240008 6000.0000 6103402.3200
13 0403240009 3060.0000 6106462.3200

每条记录的(本期金额)都是上一条记录的(本期金额)加上本次的(操作金额)所得
由于开始的时候有几条记录的(操作金额)搞错了,所以导致以后的(本期金额)全部错误,现在出错的几笔(操作金额)已经改过来了,想把(本期金额)也改过来,如果用语句时间的话应该怎么写啊?先谢了!解决后另开贴答谢!
...全文
11 点赞 收藏 16
写回复
16 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
duck22 2004-05-10
高手如云
回复
liang922 2004-05-10
学习
回复
zicxc 2004-05-10
正版货是牛,要不牛就没人冒牌了

要是原表不按BSL排序,就是聚集索引不是BSL或者没有聚集索引

回复
zjcxc 元老 2004-05-10
--测试

--测试数据
create table 帐目表(BSL int,PZH char(10),CZJE money,BQJE money)
insert 帐目表 select 4,'0000000000',5924619.3200,6047580.3200
union all select 5 ,'0403240001',5011.2000 ,6052591.5200
union all select 6 ,'0403240002',15.0000 ,6052606.5200
union all select 7 ,'0403240003',12162.0000 ,6064768.5200
union all select 8 ,'0403240004',5346.0000 ,6070114.5200
union all select 9 ,'0403240005',8623.8000 ,6078738.3200
union all select 10,'0403240006',6280.0000 ,6085018.3200
union all select 11,'0403240007',12384.0000 ,6097402.3200
union all select 12,'0403240008',6000.0000 ,6103402.3200
union all select 13,'0403240009',3060.0000 ,6106462.3200
go

--如果第一条本期金额是对的,应该改用:
--更新处理
declare @id int,@i money

select top 1 @i=BQJE,@i=BSL
from 帐目表 order by BSL

update 帐目表 set @i=@i+CZJE,BQJE=@i
where BSL<>@id
go

--显示处理结果
select * from 帐目表
go

--删除测试
drop table 帐目表

/*--测试结果

BSL PZH CZJE BQJE
----------- ---------- --------------------- ---------------------
4 0000000000 5924619.3200 6047580.3200
5 0403240001 5011.2000 6052591.5200
6 0403240002 15.0000 6052606.5200
7 0403240003 12162.0000 6064768.5200
8 0403240004 5346.0000 6070114.5200
9 0403240005 8623.8000 6078738.3200
10 0403240006 6280.0000 6085018.3200
11 0403240007 12384.0000 6097402.3200
12 0403240008 6000.0000 6103402.3200
13 0403240009 3060.0000 6106462.3200

(所影响的行数为 10 行)
--*/
回复
zjcxc 元老 2004-05-10
--如果第一条本期金额是对的,应该改用:
--更新处理
declare @id int,@i money

select top 1 @i=BQJE,@i=BSL
from 帐目表 order by BSL

update 帐目表 set @i=@i+CZJE,BQJE=@i
where BSL<>@id
回复
internetcsdn 2004-05-10
正版货才牛
回复
pbsql 2004-05-10
update 帐目表 set BQJE=CZJE+isnull((select top 1 BQJE from 帐目表 t where t.BSL<帐目表.BSL order by t.BSL desc),0)
回复
internetcsdn 2004-05-10
select sbl,bqje=(select sum(bqje) into #t from 帐目表 where sbl<=a.sbl) from 帐目表 a
update 帐目表 a set bqje=sqje from #t b where a.sbl=b.sbl
回复
zjcxc 元老 2004-05-10
--测试

--测试数据
create table 帐目表(BSL int,PZH char(10),CZJE money,BQJE money)
insert 帐目表 select 4,'0000000000',5924619.3200,6047580.3200
union all select 5 ,'0403240001',5011.2000 ,6052591.5200
union all select 6 ,'0403240002',15.0000 ,6052606.5200
union all select 7 ,'0403240003',12162.0000 ,6064768.5200
union all select 8 ,'0403240004',5346.0000 ,6070114.5200
union all select 9 ,'0403240005',8623.8000 ,6078738.3200
union all select 10,'0403240006',6280.0000 ,6085018.3200
union all select 11,'0403240007',12384.0000 ,6097402.3200
union all select 12,'0403240008',6000.0000 ,6103402.3200
union all select 13,'0403240009',3060.0000 ,6106462.3200
go

--更新处理
declare @i money
set @i=0
update 帐目表 set @i=@i+CZJE,BQJE=@i
go

--显示处理结果
select * from 帐目表
go

--删除测试
drop table 帐目表

/*--测试结果

BSL PZH CZJE BQJE
----------- ---------- --------------------- ---------------------
4 0000000000 5924619.3200 5924619.3200
5 0403240001 5011.2000 5929630.5200
6 0403240002 15.0000 5929645.5200
7 0403240003 12162.0000 5941807.5200
8 0403240004 5346.0000 5947153.5200
9 0403240005 8623.8000 5955777.3200
10 0403240006 6280.0000 5962057.3200
11 0403240007 12384.0000 5974441.3200
12 0403240008 6000.0000 5980441.3200
13 0403240009 3060.0000 5983501.3200

(所影响的行数为 10 行)
--*/
回复
zjcxc 元老 2004-05-10
--更新处理
declare @i money
set @i=0
update 帐目表 set @i=@i+CZJE,BQJE=@i
回复
zicxc 2004-05-10
你这里第一条的本期金额就就不等于操作金额,如果第一条的本期金额是对的(不更新,而且以后一这个为准)

update a
set BQJE=(select top 1 BQJE from 帐目表 order by BSL)+(select sum(CZJE) from 帐目表 where BSL<=a.BSL and BSL<>(select min(BSL) from 帐目表))
from 帐目表 a
where BSL<>(select min(BSL) from 帐目表)

回复
zicxc 2004-05-10
update a
set BQJE=(select sum(CZJE) from 帐目表 where BSL<=a.BSL)
from 帐目表 a
回复
冷箫轻笛 2004-05-10
internetcsdn(公元1979年8月10日) 跟 pbsql(风云) 的我还没有试
因为其实我的表结构要比上面的复杂的多,套用起来挺麻烦。呵呵,慢慢再试了!

多谢各位了!
回复
冷箫轻笛 2004-05-10
成功,揭贴了!

zjcxc(邹建) 进
http://expert.csdn.net/Expert/topic/3049/3049593.xml?temp=.5608789

回复
DontWorry 2004-05-10
-----------------------------------------
declare @id int,@i money

....

update 帐目表 set @i=@i+CZJE,BQJE=@i
where BSL<>@id
-----------------------------------------

set @i=@i+CZJE,BQJE=@i


牛,又學了點東西, 請問還有類似的xiao技巧麼?
回复
冷箫轻笛 2004-05-10
谢谢各位
谢谢 zjcxc(邹建) ,佩服一下!

调试一下后给分
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2004-05-10 11:36
社区公告
暂无公告