mysql:基于一个表求和其他联接表值

时间:2018-09-27 08:12:20

标签: php mysql

我的查询是计算每种产品的数量不足的总数。

要创建产品,我需要多个项目。因此,我需要检查每个项目是否足够。然后,向用户显示每个项目的数量不足。

bpo_require_item表中,每个项目都有必要的数量才能创建产品。如果产品订单不止一个,则同一项目存在多行。 (model_id代表产品。)

id | model_id | item_id | item_code | necessary_qty |
1       1           1         I001         2000
2       1           2         I002         2000
3       1           3         I003         1000              
4       2           1         I001         1500
5       2           2         I002         4500
6       2           3         I003         1500  
7       3           1         I001         2500
8       3           2         I002         3750
9       3           3         I003         5000  
10      3           5         I005         6250 

warehouse_item表中,实际仓库中每个项目的数量仍然存在。

id | item_id | item_code | normal_quantity |
 1       1         I001         140
 2       2         I002         120
 3       3         I003         110
 4       5         I005         200

每个项目都有safety stock quantity,因为如果仓库中的项目几乎达到安全库存,那么我们需要从供应商处订购该项目。这是item表。

item_id | item_code | safety_stock_qty |
1         I001         100
2         I002         100
3         I003         100
5         I005         100

pre_supplier_order表中,我们保存了每个需要的物料数量(但这不是真实的订单)。

id | item_id | item_code | order_qty |
 1       1         I001         3460
 2       2         I002         6480
 3       3         I003         2490

supplier_order_item表中,这是实际订单数据。

id | item_id | item_code | order_qty | date
 1       1         I001         1000     2018-09-25
 2       1         I001         500      2018-09-27
  

注意:还有另一个表,例如buyer_ordersupplier_order,   但我在这里没有提及具体内容,因为我只需要检查   {{1}的bpo_status='O4'supplier_order

现在,我需要根据spo_status=S1表来计算每个项目的数量。

首先,对bpo_require_item中所有相同的item_id数量求和,然后对bpo_require_item表和pre_supplier_order表中所有相同的item_id求和。然后我要使用以下公式计算每个项目:

supplier_order_item

对于上述表格数据,我对每个项目的数量不足的预期结果如下:

each item insufficient_qty = ( (warehouse.normal_quantity - item. safety_stock_qty) + pre_supplier_order.order_qty + supplier_order_item.quantity ) - (bpo_require_item.necessary_qty)

但是,我的查询结果有误。

item_id ( necessary_qty ) - ((warehouse-safety_stock_qty) + pre_supplier_order + supplier_order_item)) = insufficient_qty
   1        6000                    40                        3460                 1500                    -1000
   2        10250                   20                        6480                                         -3750
   3        7500                    10                        2490                                         -5000
   5        6250                    100                                                                    -6150

我认为问题是SELECT * FROM ( SELECT bri.item_id, bri.item_code, bri.item_name, bri.vmc_code, bri.hs_code, itm.safety_stock_qty, SUM(bri.necessary_qty) as total_require_item, SUM(pre.order_qty) as total_pre_item, SUM(soi.quantity) as total_supplier_order, wi.normal_quantity, ( ( (wi.normal_quantity-itm.safety_stock_qty) + coalesce(SUM(pre.order_qty),0)+ coalesce(soi.quantity,0) ) - coalesce(SUM(bri.necessary_qty),0) ) as insufficient_qty FROM `buyer_order` as bo LEFT JOIN bpo_require_item as bri ON (bo.po_no = bri.po_no AND bo.bpo_status='O4') LEFT JOIN item as itm ON (bri.item_id = itm.item_id AND itm.flag=1) LEFT JOIN warehouse_item as wi ON (bri.item_id = wi.item_id) LEFT JOIN pre_supplier_order as pre ON (bri.item_id = pre.item_id) LEFT JOIN supplier_order_item as soi ON (bri.item_id = soi.item_id) LEFT JOIN supplier_order as so ON (soi.supplier_order_id = so.supplier_order_id AND so.spo_status='S1') GROUP BY bri.item_id ORDER BY bo.po_no, bri.item_id ) as requireItemTable WHERE insufficient_qty < 0 ,每个带有SUM的项目都是错误的。但我不确定如何解决。

0 个答案:

没有答案