有一个TABLE:
CREATE TABLE [dbo].[test] (
[次序] [int] NOT NULL ,
[采购单价] [int] NOT NULL ,
[入仓数] [int] NULL ,
[入仓价] [int] NULL ,
[入仓金额] [int] NULL ,
[出仓数] [int] NULL ,
[出仓价] [int] NULL ,
[出仓金额] [int] NULL ,
[库存数] [int] NULL ,
[移动单价] [int] NULL ,
[库存金额] [int] NULL
) ON [PRIMARY]
现数据如下:
次序 采购单价 入仓数 入仓价 入仓金额 出仓数 出仓价 出仓金额 库存数 移动单价 库存金额
0 0 0 0 0 0 0 0 100 10 1000
1 0 0 0 0 5 0 0 95 0 0
2 0 0 0 0 10 0 0 85 0 0
3 2 500 2 1000 0 0 0 585 0 0
4 0 0 0 0 20 0 0 565 0 0
5 0 0 0 0 30 0 0 535 0 0
6 0 0 0 0 40 0 0 495 0 0
7 5 100 5 500 0 0 0 595 0 0
8 0 0 0 0 50 0 0 545 0 0
9 0 10 0 0 0 0 0 555 0 0
10 0 0 0 0 100 0 0 455 0 0其中,次序为0的为期初数现在要算移动单价,入仓金额,出仓金额,库存金额(期初数除外)算法如下:
如果采购单价=0时,移动单价=上一笔的移动单价(按次序排序)
如果不为0时,移动单价=(上一笔库存金额+(入仓金额))/库存数量库存金额=上一笔库存金额+入仓金额-出仓金额入仓金额算法:
如果采购单价=0时,入仓金额=移动单价*入仓数量
如果不为0时,入仓金额不动出仓金额算法:
入仓金额=移动单价*出仓数量用一个存储过程处理,且不能用游标!请各位大侠赐教!
CREATE TABLE [dbo].[test] (
[次序] [int] NOT NULL ,
[采购单价] [int] NOT NULL ,
[入仓数] [int] NULL ,
[入仓价] [int] NULL ,
[入仓金额] [int] NULL ,
[出仓数] [int] NULL ,
[出仓价] [int] NULL ,
[出仓金额] [int] NULL ,
[库存数] [int] NULL ,
[移动单价] [int] NULL ,
[库存金额] [int] NULL
) ON [PRIMARY]
现数据如下:
次序 采购单价 入仓数 入仓价 入仓金额 出仓数 出仓价 出仓金额 库存数 移动单价 库存金额
0 0 0 0 0 0 0 0 100 10 1000
1 0 0 0 0 5 0 0 95 0 0
2 0 0 0 0 10 0 0 85 0 0
3 2 500 2 1000 0 0 0 585 0 0
4 0 0 0 0 20 0 0 565 0 0
5 0 0 0 0 30 0 0 535 0 0
6 0 0 0 0 40 0 0 495 0 0
7 5 100 5 500 0 0 0 595 0 0
8 0 0 0 0 50 0 0 545 0 0
9 0 10 0 0 0 0 0 555 0 0
10 0 0 0 0 100 0 0 455 0 0其中,次序为0的为期初数现在要算移动单价,入仓金额,出仓金额,库存金额(期初数除外)算法如下:
如果采购单价=0时,移动单价=上一笔的移动单价(按次序排序)
如果不为0时,移动单价=(上一笔库存金额+(入仓金额))/库存数量库存金额=上一笔库存金额+入仓金额-出仓金额入仓金额算法:
如果采购单价=0时,入仓金额=移动单价*入仓数量
如果不为0时,入仓金额不动出仓金额算法:
入仓金额=移动单价*出仓数量用一个存储过程处理,且不能用游标!请各位大侠赐教!
http://topic.csdn.net/u/20080310/13/39629d84-7d44-4de0-a010-2a6688894ab8.html?seed=1944131440表TEST
id(主键) 字段1 字段2 字段3
1 5.00 2 0.00
3 6.00 5 0.00
4 10.00 3 0.00
5 8.00 2 0.00
6 16.00 4 0.00
...
如何移动加权平均得到字段3
id(主键) 字段1 字段2 字段3
1 5.00 2 5.00
3 6.00 5 5.00
4 10.00 3 57.14=(5.00*2+6.00*5)/(2+5)
5 8.00 2 7.00=(5.00*2+6.00*5+10.00*3)/(2+5+3)
6 16.00 4 7.17=(5.00*2+6.00*5+10.00*3+8.00*2)/(2+5+3+2)
---------------------------------------------------------
create table tb(id int ,字段1 numeric(8,2) , 字段2 int , 字段3 numeric(8,2))
insert into tb select 1,5.00,2,0.00
insert into tb select 3,6.00,5,0.00
insert into tb select 4,10.00,3,0.00
insert into tb select 5,8.00,2,0.00
insert into tb select 6,16.00,4,0.00
goselect id , 字段1 , 字段2 , 字段3 = isnull((select sum(字段1*字段2) / sum(字段2) from tb where id < t.id),字段1) from tb tdrop table tb/*
id 字段1 字段2 字段3
---- ----- ----- ---------
1 5.00 2 5.000000
3 6.00 5 5.000000
4 10.00 3 5.714285
5 8.00 2 7.000000
6 16.00 4 7.166666(所影响的行数为 5 行)
*/