我正在使用 Mysql(不是 MSSQL)数据库,并遇到了一个我似乎无法解决的问题。我非常感谢您帮助寻找解决方案。 我想使用两个表创建一个 View ,如下所述:
1. product_in
product_code
received_time
received_amount
2. product_out
product_code
delivery_time
delivered_amount
“ View ”应提供以下内容:
product_code
received_time
received_amount
of_which_delivered
我的问题是product_out要管理第一个传入的数据(FIFO:先进先出),但是由于交付的数量或多于或少于接收的数量,我不知道如何计算“of_which_delivered”。
到目前为止,我成功地对传入数据进行了排序,并使用 SUM 对输出(已交付) cargo 进行了汇总。
SELECT
sn,
product_code,
received_time,
received_amount,
delivered_amount
FROM
( SELECT
received_time,
received_amount,
@rend2 := If( @rend1 = product_code, @rend2 + 1, 1) as sn,
@rend1 := product_code AS product
FROM
product_in,
( SELECT @rend1 := 0, @rend2 := 0 ) AS tt
ORDER BY
product_code,
received_time ) AS k
LEFT JOIN
( SELECT
product_code AS prdct,
SUM(delivered_amount) AS delivered_amount
FROM
product_out
GROUP BY
product_code ) AS b
ON aru = product_code
我还没有成功创建循环,该循环可以分析输出金额是否大于或小于给定日期的接收金额,如果大于,则将差额添加到接收的金额中改天。
更准确地说,这是一个示例:
Product Date Qty
nr.1 Sep 2 500
nr.1 Sep 3 300
nr1. Sep 4 200 on the 4th.
5日已发货900件。
在这种情况下,我们应该在 View 中看到以下内容:
Product Action Date Qty
nr.1 received Sep 2 500 (delivered all 500)
nr.1 received Sep 3 300 (delivered all 300)
nr.1 received Sep 4 200 (only 100 delivered)
我将非常感谢任何可以帮助我找到解决方案的人!
最佳答案
抱歉,没有为您调整查询,但是...过去使用过会计系统,您的数据库结构似乎缺乏更好地处理输入/输出 FIFO 方法(甚至是 LIFO)的能力。底层会计系统有一个所有收据的库存表(缩写)
Table: ItemTrans
ItemTransID (auto-increment ID for any transaction)
ItemID (item id of the inventory item)
Status (status, such as In, Our or Inventory Adjustment)
Date (date of the activity)
Qty (quantity)
QtyUsed (running total column as inventory was used up)
随着元素的出售或调整。销售详细信息表将显示数量用于哪个 ItemTrans 记录。因此,如果您手头有库存(如示例中那样),则销售订单详细信息行将显示 900。库存使用表将显示数量是从哪个特定 ItemTransID 分配的以及来自所述 block 的数量,从而显示您的库存实际产品发布的预期事件是在销售时。
这样,您就不必重新创建给定时间点的库存。只需查询销售订单详细信息以及从哪些项目中提取数据即可获取数据以及每个收据 block 中有多少个数据。
这简化了生成 COGS(销售成本)的过程,该过程将通过应收帐款(销售订单)事件等子日记帐报告给总账。
你们有能力对你们的数据库结构进行这样的调整吗?
关于mysql - MySQL 数据库中的 FIFO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32865362/