有一个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时,入仓金额不动出仓金额算法:
入仓金额=移动单价*出仓数量用一个存储过程处理,且不能用游标!请各位大侠赐教!

解决方案 »

  1.   

    几个case  when  就解决了撒
      

  2.   

    移动加权平均应用实例参考:http://blog.csdn.net/htl258/archive/2010/04/18/5497250.aspx
      

  3.   

    参考:一个移动加权平均的例
    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 行)
    */