我建议你专门建立一个“库存信息表”,里面包含产品id、进价、出价、仓存等信息,这个表与入仓记录、出仓记录分开。
比如:
入仓记录:
产品id 时间 数量 单价 类型
001 2002-11-20 200 100 入仓
001 2002-11-30 100 50 入仓每产生一笔入仓记录,就计算一下库存信息,如:
产品id 仓存 进价 出价 类型
001 300 50 50
比如:
入仓记录:
产品id 时间 数量 单价 类型
001 2002-11-20 200 100 入仓
001 2002-11-30 100 50 入仓每产生一笔入仓记录,就计算一下库存信息,如:
产品id 仓存 进价 出价 类型
001 300 50 50
--------------------------------------------------
入仓表 |
产品id 时间 数量 单价 类型 |
001 2002-11-20 200 100 入仓 |
--------------------------------------------------
这样的纪录能顺利读取,但出仓时数据库的纪录为:
--------------------------------------------------
产品id 时间 数量 类型 |
001 2002-11-20 200 出仓 |
--------------------------------------------------没有单价,因为可能要求过几条入仓信息 计算出,如贴所讲
提取产品数量来源于两批不同价格的同类产品时,要求加权计算
提取时的单价, 所以希望能有更好的办法.
from table_name;另外,根据你局的平均单价的例子,我认为这种计算方式应该是“加权平均法”,而不是“先进先出”法。如果是“先进先出”法,那么你的2002-12-1得出仓记录应该是2条记录,即:时间 数量 单价 类型
2002-12-1 100 100 出仓
2002-12-1 100 50 出仓
也就是说,先前进的200件商品,由于还剩下100,因此这100应该先出仓,价格按照当时的价格100来计算,然后再把第二次进的100件商品出仓,价格采用第二次的价格。这是先进先出法的计算规则。而计算剩下的商品的平均价格,显然应该算作是“加权平均法”。
欢迎探讨。
另外,出仓(H_info)入仓(R_info)为不同的表, 另外再有一个 仓库零细表(depot_info),H_info无单价,r_info有depot_info 记录该产品库存 (很有用的信息,可以确定从哪几批产品中提取)再举一次例子:
原材料 A 设原来仓存为 0
入仓时间 数量 单价 仓存
2002-11-20 200 100 200
2002-11-30 100 50 300则depot_info 库存为 300有两条出仓纪录
出仓时间
[1] 2002-11-25 100 depot_info 库存为 200
[2] 2002-12-1 200 depot_info 库存为 0出先进先出得 [1] 就从 11-20提取而11-20入仓的哪批产品足够满足[1]的数量,
所以[1] 的单价= 11-20 入仓的单价= 100[2]出仓时, 先由先进先出得出要从11-20 提取 ,由于 [2]数量 > 11-20 数量,则11-20全部提取,并再向 12-30 提取直到满足 [2]的要求 .
则 [2] 由先进先出得出要从两批入仓产品中提取,即你所说的 :时间 数量 单价 类型
2002-12-1 100 100 出仓
2002-12-1 100 50 出仓 但就作为一条出仓纪录输出 ,即
时间 数量 单价 类型
2002-12-1 200 75 出仓 而75是从两批产品提取的殖民地数量 (100 + 100) 得出的加权平均单价 :
(100(11-20的剩余数量) * 100 + 100 * 50 ) / (100+ 100)=75你所说的 sum() 计出来的单价就该就是
(200(11-20的入仓数量) * 100 + 100 * 50 ) / 200 = 125我想求出出仓单价的步骤就该是 :
查找库存数量 -> 确定该数量是从哪几批产品的入仓得到的 -> 从前面符合要求的最早的一批产品中提取,直到满足出仓数量 ,记录每批产品入仓单价及提取数量
-> 由提取数量及单价计得该批产品出仓时的单价 希望继续回复...
”,因为sum函数中有个case条件,如果类型是“出仓”,那么数量就取负值,最后的数量就是“剩余数量”。
既然它放到了两个表里,我给你提个建议,因为我做的系统也有这个需求,我的基本设计思路与你类似,也是出仓、入仓分开,另外还有一个仓存表。但是我的入仓表比你多了一个关键的字段(当然,我的入仓表还有好多其他字段,但是与本题无关,此处省略)——“出仓数”,也就是每次出仓的时候,根据入仓时间采用先进先出算法的出本次出仓的数量需要算到那条入仓记录上,然后再记录上标明本次的“出仓数”,这样当下次再有出仓的时候,我只要读取入仓记录就可以确定从哪条入仓记录上出多少,而不需要每次都去出仓表中取数据再比较,而且出仓我使用了一个cursor,既然能够从入仓记录中得到本次的出仓数,而且单价是现成的,那么计算它的出库价格就很容易了,对吧?思路有了,我想具体算法应该不是很难了,这里就不写了,如果你确实需要,说一声,我再写给你。