首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL 游标有关问题请问

2012-12-24 
SQL 游标问题请教我用函数写了一个查询可以得到如下结果:ZA001ZA002ZA003ZA004ZA005ZA006ZA007ZA008201200

SQL 游标问题请教
我用函数写了一个查询可以得到如下结果:
ZA001ZA002ZA003ZA004ZA005ZA006ZA007ZA008
2012001001库存现金                      01000
2012091001库存现金                      0000
2012101001库存现金                      01420
2012111001库存现金                      09120

如何加入游标,使结果显示为:
ZA001ZA002ZA003ZA004ZA005ZA006ZA007ZA008
2012001001库存现金                      010010
2012091001库存现金                      100010
2012101001库存现金                      1014222
2012111001库存现金                      2291219

本行ZA005+ZA006-ZA007 = ZA008
本行ZA008  = 下一行ZA005.
这个游标要怎么写?
[解决办法]

究竟ZA008=ZA005+ZA006-ZA007 还是等于下一行的ZA005呢
[解决办法]

引用:
究竟ZA008=ZA005+ZA006-ZA007 还是等于下一行的ZA005呢


下一行的ZA005 = 上一行ZA008
[解决办法]

游标正常写
同时声明一个变量
存储上一行 AZ008

[解决办法]
我是这样写的
DECLARE @ZA002 char(2),@ZA005 Numeric(16,6),@ZA006 Numeric(16,6),@ZA007 Numeric(16,6),@ZA008 Numeric(16,6)
SELECT @ZA005=ZA005 FROM @ACTZA WHERE ZA002='00'

declare my_cursor cursor for 
select ZA002,ZA005,ZA006,ZA007 from @ACTZA order by ZA002 desc
Open my_cursor 
fetch my_cursor into @ZA002,@ZA005,@ZA006,@ZA007
while @@fetch_status=0 
begin 
SET @ZA008=@ZA005+@ZA006-@ZA007
UPDATE A SET A.ZA008=@ZA008  FROM @ACTZA A WHERE A.ZA002=@ZA002 
fetch my_cursor into @ZA002,@ZA005,@ZA006,@ZA007
end 
close my_cursor 
deallocate my_cursor 
要怎么调整
[解决办法]
DECLARE @ZA002 char(2),@ZA005 Numeric(16,6),@ZA006 Numeric(16,6),@ZA007 Numeric(16,6),@ZA008 Numeric(16,6)
SELECT @ZA005=ZA005 FROM @ACTZA WHERE ZA002='00'
----以下是增加的代码
DECLARE @save08 int
set @save08 = 0
---以上是增加的代码

declare my_cursor cursor for 
select ZA002,ZA005,ZA006,ZA007 from @ACTZA order by ZA002 desc
Open my_cursor 
fetch my_cursor into @ZA002,@ZA005,@ZA006,@ZA007
while @@fetch_status=0 
begin 
---修改
SET @ZA008=@save08+@ZA005+@ZA006-@ZA007
UPDATE A SET A.ZA008=@ZA008  FROM @ACTZA A WHERE A.ZA002=@ZA002 


--修改
set @save08 = @ZA008
fetch my_cursor into @ZA002,@ZA005,@ZA006,@ZA007
end 
close my_cursor 
deallocate my_cursor 


DECLARE @ZA002 char(2),@ZA005 Numeric(16,6),@ZA006 Numeric(16,6),@ZA007 Numeric(16,6),@ZA008 Numeric(16,6)
SELECT @ZA005=ZA005 FROM @ACTZA WHERE ZA002='00'
----以下是增加的代码
DECLARE @save08 int
set @save08 = 0
---以上是增加的代码

declare my_cursor cursor for 
select ZA002,ZA005,ZA006,ZA007 from @ACTZA order by ZA002 desc
Open my_cursor 
fetch my_cursor into @ZA002,@ZA005,@ZA006,@ZA007
while @@fetch_status=0 
begin 
---修改
SET @ZA008=@save08+@ZA005+@ZA006-@ZA007
UPDATE A SET A.ZA008=@ZA008  FROM @ACTZA A WHERE A.ZA002=@ZA002 
--修改
set @save08 = @ZA008
fetch my_cursor into @ZA002,@ZA005,@ZA006,@ZA007
end 
close my_cursor 
deallocate my_cursor 

[解决办法]
可能是我没说明清楚,我现在的游标已可以做到如下结果:
ZA001 ZA002 ZA003 ZA004 ZA005 ZA006 ZA007 ZA008
2012 00 1001 库存现金                       0 10 0 10
2012 09 1001 库存现金                       0 0 0 10
2012 10 1001 库存现金                       0 14 2 22
2012 11 1001 库存现金                       0 9 12 19

但是本行ZA005没有带上一行ZA008的值。
这个要怎么实现?
[解决办法]
自己搞定了,结贴

热点排行