有如下两表:
收料单 发料单
日期 摘要 材料代号 数量 单位成本 日期 摘要 材料代号 数量
9.2 A 80 5 9.8 B 20
9.5 B 40 3 9.15 B 50
9.6 A 50 6 9.12 A 120
9.12 B 60 4 9.20 A 80
9.18 A 50 7
9.28 A 50 6
需要用移动加权平均法计算存货成本,生成如下报表:
例如对于A材料根据收料表和发料表数据,产生以下查询报表:
日期 收料 发料 结存
数量 单位成本 总成本 数量 单位成本 总成本 数量 单位成本 总成本
9.1 100 4.000 400
9.2 80 5 400 180 4.444 800
9.9 50 6 300 230 4.7826 1100
9.12 120 4.7826 573.91 110 4.7826 526.09
9.18 50 7 350 160 5.475 876.09
9.20 80 5.475 438.04 80 5.475 438.05
9.28 50 6 300 130 5.677 738.05
上表中必须在每次收货后根据库存数量及其总成本算出新的平均单位成本。如9月9日的平均单位成本为4.7826=1100/230,9月18日的平均单位成本为5.4756=876.09/160,9月28日的平均单位成本为5.6773=738.05/130,
每次进货后算出新的平均单位成本就作为随后发出商品的平均单位成本,以此计算每批发出商品的总成本,直至下次收获后再算出新的平均单位成本为止。 如何用游标写一存储过程生成以上平均单位成本的报表
这个问题第1个回答:
存储过程:
create proc p1 (@材料代号 char)
as
select isnull(A.日期,isnull(B.日期,C.日期)) 日期,
A.数量 收料数量, A.单位成本 收料单位成本, A.单位成本*A.数量 收料总成本,
B.数量 发料数量, null 发料单位成本, null 发料总成本,
C.数量 结存数量, C.单位成本 结存单位成本, C.单位成本*C.数量 结存总成本
into #t
from 收料单 A full join 发料单 B on A.日期 = B.日期 and A.材料代号 = B.材料代号
full join (select cast('2003-9-1' as datetime) 日期, @材料代号 材料代号,100 数量, cast(4 as numeric(10,4)) 单
[1] [2] [3] 下一页