注册 登录
编程论坛 SQL Server论坛

期初余额与发生额循环相加的游标

huangfrsj 发布于 2014-07-24 16:05, 873 次点击
我的数据库中有两张表,如图:
只有本站会员才能查看附件,请 登录

如今,我想把第二张表的期初余额作为第二张的期初余额
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

最后生成如图:
只有本站会员才能查看附件,请 登录


为此我写了一段游标代码:

declare @kmdm1 varchar(11),@qcye numeric(18,2)
declare yecur cursor for
select 科目代码,期初余额 from ceshiqcye
open yecur
fetch next from yecur into @kmdm1,@qcye
print '月份'+'    '+'科目代码'+'        '+'发生额'+'        '+'余额'
while @@fetch_status=0
begin
print '        '+@kmdm1+'                   '+cast(@qcye as varchar(10))
  declare @yf varchar(2),@kmdm2 varchar(11),@fse numeric(18,2),@id int,@ye numeric(18,2)
  declare fscur cursor for
  select 月份,科目编码,发生额,行数 from ceshifse
  open fscur
  fetch next from fscur into @yf,@kmdm2,@fse,@id
  while @@FETCH_STATUS=0
  begin
  print @yf+@kmdm2+@fse+@ye
   if
    @id=1 set @ye=@qcye+@fse
   else
    set @ye=@ye+@fse
   end
  fetch next from fscur into @yf,@kmdm2,@fse,@id
  end
  close fscur
  deallocate fscur
fetch next from yecur into @kmdm1,@qcye
end
close yecur
deallocate yecur
在SQL Server2008中运行,出现如下提示:
消息 156,级别 15,状态 1,第 29 行
关键字 'close' 附近有语法错误。
请各位大侠不吝赐教!!
7 回复
#2
volte2014-07-25 17:58
多了个end  
end 与begin不全匹配。
#3
huangfrsj2014-07-25 18:55
回复 2 楼 volte
还是不对呀,运行了一下,发现只会出现一个期初余额,其他科目的则沿用第一个科目的期初余额,请说明白一些。
#4
volte2014-07-28 10:11
1,首先把你提的问题理清思路再发上来。“我想把第二张表的期初余额作为第二张的期初余额” 这都是什么意思!你自己能读通吗?
2,你这个游标过程主要是处理什么问题;目的是什么
程序员写程序之前先把逻辑想好。发表下你的思路再提问题;
#5
tlliqi2014-07-28 11:18
赞同楼上
#6
huangfrsj2014-07-28 18:46
回复 6 楼 volte
第一张表内只有余额,没有发生额,而第二张只有发生额,没有余额,所以我想生成一张既有余额又有发生额的表。
第一步:新表第一条记录是第一张表中的余额直接插入的,没有发生额。接下来是用新表的第一条记录的余额加第二张表的第一条记录的发生额生成新的余额连同第二张的发生额作为新表中的第二条记录,依此类推。
第二步:当第二表中的科目发生改变时,重复第一步。
#7
volte2014-07-30 09:46
哎,你竟然把变量声明在游标内。
而且从你的代码里也没看到数据被插入到你的新表。
可以说你的代码跟你的逻辑牛头不对马嘴啊!

要是这个不是家庭作业的话,建议还是好好看些书吧!
#8
huangfrsj2014-07-30 20:33
回复 7 楼 volte
急用,请帮我改一改,谢了大侠。
1