我有两个表,一个用于入库,一个用于出库,或多或少看起来像这样:

               purchase (incoming)
--------------+----------+-------+-----------
 inventory_id | quantity | price | timestamp
--------------+----------+-------+-----------
 bobble       |        1 | $1.00 | 2014-01-01
 trinket      |        2 | $1.00 | 2014-01-02
 trinket      |        2 | $2.00 | 2014-01-03
--------------+----------+-------+-----------


               sale (outgoing)
--------------+----------+-------+-----------
 inventory_id | quantity | price | timestamp
--------------+----------+-------+-----------
 trinket      |        1 | $3.00 | 2014-01-04
 bobble       |        1 | $3.00 | 2014-01-05
 trinket      |        2 | $3.00 | 2014-01-06
 trinket      |        1 | $3.00 | 2014-01-07
--------------+----------+-------+-----------

我希望有一个看起来像这样的 View :
                             sale_with_cost_of_goods
--------------+----------+-------------+------------+-----------+-----------+----------
 inventory_id | quantity | total_price | timestamp  | cogs_fifo | cogs_lifo | cogs_avg
--------------+----------+-------------+------------+-----------+-----------+----------
 trinket      |        1 |       $3.00 | 2014-01-04 |     $1.00 |     $2.00 |    $1.50
 bobble       |        1 |       $3.00 | 2014-01-05 |     $1.00 |     $1.00 |    $1.00
 trinket      |        2 |       $6.00 | 2014-01-06 |     $3.00 |     $3.00 |    $3.00
 trinket      |        1 |       $3.00 | 2014-01-07 |     $2.00 |     $1.00 |    $1.50
--------------+----------+-------------+------------+-----------+-----------+----------

我可以处理总价格和所售商品的平均成本,但是FIFO和LIFO查询让我感到不适。

这合理甚至可能吗?任何帮助将不胜感激。

最佳答案

当客户从库存的标准成本核算转移到FIFO成本核算时,我遇到了类似的问题。我的解决方案是:
1.在购买表中添加一列“剩余数量”
2.在销售表中为“COGS”添加一列
3.修改销售订单发货模块中的代码,以根据购买的最旧剩余数量(有时多于一行)计算COGS,同时相应地减少剩余数量。
由于所有数据都位于sales表中,因此查询变得简单。

关于sql - 计算已售商品成本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25976665/

10-15 18:46