查询凭证与余额表的游标
大虾帮忙解决游标问题我在SQL Server2008中想通过凭证表与余额表连接查询得到如下结果:
年度 会计月份 科目编码 科目名称 期初余额 借方发生额 贷方发生额 期末余额
2011 1 1010102 备用金 10000 198981.97 177181.97 31800
2011 3 1010102 备用金 31800 44209 66009 10000
2011 4 1010102 备用金 10000 27471.35 27471.35 10000
2011 5 1010102 备用金 10000 27240.35 27240.35 10000
2011 6 1010102 备用金 10000 20480.35 30480.35 0
2011 7 1010102 备用金 0 45652 25652 20000
2011 8 1010102 备用金 20000 45334.5 45334.5 20000
2011 9 1010102 备用金 20000 26044 26044 20000
2011 10 1010102 备用金 20000 46029.5 46029.5 20000
2011 11 1010102 备用金 20000 58183 38183 40000
2011 12 1010102 备用金 40000 187916.76 187916.76 40000
以上结果省略了2012年的数据!
我写了下面的游标代码:
declare @n int,@nd char(12),@kjqj char(2),@kmbm char(7),@kmmc char(14),@qcye numeric(8,2),@jffs numeric(8,2),@dffs numeric(8,2),@qmye numeric(8,2)
set @n=1 '用以存储行数
declare xj cursor for
Select a.年度,会计月份,a.科目编码,a.科目名称
,b.期初余额
,cast(sum(借方金额) as numeric(8,2)),cast(sum(贷方金额) as numeric(8,2))
,b.期初余额+cast(sum(借方金额) as numeric(8,2))-cast(sum(贷方金额) as numeric(8,2))
From [凭证库] a
join dbo.余额表 b on a.年度=b.年度 and a.科目编码=b.科目编码
WHERE a.科目编码 LIKE'101%' AND (a.年度=2011 or a.年度=2012) group by a.年度,会计月份,a.科目编码,a.科目名称,期初余额
order by a.年度,会计月份
open xj
print '年度 会计月份 科目编码 科目名称 期初余额 借方发生额 贷方发生额 期末余额'
fetch next from xj into @nd,@kjqj,@kmbm,@kmmc,@qcye,@jffs,@dffs,@qmye
while @@fetch_status=0
begin
if @kjqj=1
print @nd+@kjqj+' '+@kmbm+' '+@kmmc+' '+cast(@qcye as char(10))+' '+cast(@jffs as char(10))+' '+cast(@dffs as char(10))+' '+cast(@qmye as char(10))
else
begin
print @nd+@kjqj+' '+@kmbm+' '+@kmmc+' '+cast(@qmye as char(10))+' '+cast(@jffs as char(10))+' '+cast(@dffs as char(10))+' '+cast(@qmye as char(10))
end
fetch next from xj into @nd,@kjqj,@kmbm,@kmmc,@qcye,@jffs,@dffs,@qmye
end
close xj
deallocate xj
运行之后得到了与想要的结果不一致,如下:
年度 会计月份 科目编码 科目名称 期初余额 借方发生额 贷方发生额 期末余额
2011 1 1010102 备用金--报账员 10000.00 198981.97 177181.97 31800.00
2011 3 1010102 备用金--报账员 -11800.00 44209.00 66009.00 -11800.00
2011 4 1010102 备用金--报账员 10000.00 27471.35 27471.35 10000.00
2011 5 1010102 备用金--报账员 10000.00 27240.35 27240.35 10000.00
2011 6 1010102 备用金--报账员 0.00 20480.35 30480.35 0.00
2011 7 1010102 备用金--报账员 30000.00 45652.00 25652.00 30000.00
2011 8 1010102 备用金--报账员 10000.00 45334.50 45334.50 10000.00
2011 9 1010102 备用金--报账员 10000.00 26044.00 26044.00 10000.00
2011 10 1010102 备用金--报账员 10000.00 46029.50 46029.50 10000.00
2011 11 1010102 备用金--报账员 30000.00 58183.00 38183.00 30000.00
2011 12 1010102 备用金--报账员 10000.00 187916.76 187916.76 10000.00
2012 1 1010102 备用金--报账员 40000.00 76280.50 36280.50 80000.00
2012 2 1010102 备用金--报账员 40000.00 29809.78 29809.78 40000.00
2012 3 1010102 备用金--报账员 120000.00 159959.00 79959.00 120000.00
2012 4 1010102 备用金--报账员 70000.00 55745.00 25745.00 70000.00
2012 5 1010102 备用金--报账员 -110000.00 49839.80 199839.80 -110000.00
2012 6 1010102 备用金--报账员 70000.00 56390.50 26390.50 70000.00
2012 7 1010102 备用金--报账员 -10000.00 66239.08 116239.08 -10000.00
2012 8 1010102 备用金--报账员 40000.00 0.00 0.00 40000.00
2012 9 1010102 备用金--报账员 20000.00 0.00 20000.00 20000.00
2012 9 1010103 **** 20000.00 56710.50 36710.50 20000.00
2012 10 1010103 **** 0.00 40410.00 40410.00 0.00
2012 11 1010103 **** 0.00 14214.00 14214.00 0.00
2012 12 1010103 **** 0.00 40265.70 40265.70 0.00
我找了好久都没找出原因,请大家帮我修改一下,并将修改部分标注出来,谢了!
[ 本帖最后由 huangfrsj 于 2013-8-3 16:26 编辑 ]