在论坛上几次碰到过类似的于FIFO问题,故共享一个有些"恶搞"的算法。在很多情况下,需要对一些记录,比如出入库记录,收付款记录进行先入先出的匹配。一般来说普通做法......
在论坛上几次碰到过类似的于FIFO问题,故共享一个有些"恶搞"的算法。
在很多情况下,需要对一些记录,比如出入库记录,收付款记录进行先入先出的匹配。一般来说普通做法是在某个物料出库的时候通过程序来对比实现。但这种设计对业务要求比较严格。比如需要事先制定,退货,红冲的处理方式。在一些简单的系统中可以直接采用查询来实现。下面用个例子来说明。
两个表 入表 tin(id,marno,qty) // id,主键,可视为批号 ; marno , 物料编号; qty数量 出表 tout(id,marno,qty)
记录如下 tin id |marno|qty 1 | A |10 2 | A |5 3 | B |20 4 | C |7 5 | A |15 6 | A |20 tout id |marno|qty 1 | A |3 2 | A |2 3 | B |10 4 | A |1 5 | A |30 对照算法 出库 |对应入库批号 id |marno|qty |id |数量|剩 1 | A |3 | 1 |10 |7 2 | A |2 | 1 |7 |5 3 | B |10 | 3 |20 |10 4 | A |1 | 1 |5 |4 5 | A |4 | 1 |4 | 5 | A |5 | 2 |5 | 5 | A |15 | 5 |15 | 5 | A |6 | 6 |20 |14
期望结果 出库 |对应入库批号 id |marno|qty |id 1 | A |3 | 1 2 | A |2 | 1 3 | B |10 | 3 4 | A |1 | 1 5 | A |4 | 1 5 | A |5 | 2 5 | A |15 | 5 5 | A |6 | 6
SQL 语句:
SELECT o.id,o.marno, iif(i.accQty<o.accQty,i.accQty,o.accQty) - iif(i.paccQty>o.paccQty,i.paccQty,o.paccQty) AS
1/2 1 2 下一页 尾页 |