2016-07-15 40 views
0

我有数据库结构的图片(它简化)所示simplified database structure计算中的多个where子句中的MySQL

所以现在我要计算产品的所有股票,这样的结果看起来像(这个假设存储表具有两个记录商店1和商店2的):

enter image description here

如果这是不可能的这种格式是可以接受的太

enter image description here

主要问题是,我不知道我应该如何计算每个商店的当前库存。

the curent stock for each stock = sum of all productin this stock 
           - sum of all productout this stock 
           + sum of all producttransfer with transfertype=0 in this stock 
           - sum of all producttransfer with transfertype=1 in this stock 

所以我应该如何计算每个店铺时数不固定

+0

这是一个非常不合理的股票系统设计。你能改变设计(至少有一点)吗?如果我理解正确,那么您为每种类型的库存更改添加/有一张表,您可以并应该实际上只添加一个带有类型的列(尽管不需要,您仍可以获取附加表以获取其他特定信息) ,也可能是商店专栏,但我想这不符合你的设计理念。你的模型就像一个商店添加到一个真正的通用行动模型,而不是一个商店。 – Solarflare

+0

否则,您可以将所有的动作表连接在一起,然后使用'sum(productin.id为null的情况,然后actiondetails.Quantity else 0结束)+ sum(productout.id则为--actiondetails.Quantity其他0结束)+ ...'或类似的东西。 – Solarflare

回答

0

,我认为它应该工作专卖店,我书面方式它在旅途所以不能100%肯定有可能是一些错别字

select A1.ProductID, A1.storehouseID, (SUM(IN)-SUM(OUT)) as quantity 
    from (
      Select AD.productID, A.storehouseID, SUM(AD.Quantity) as IN 
      from actions A inner join productIN PI on A.ID = PI.ID 
         inner join actiondetails AD on PI.ID = AD.ID 
    group by AD.productID, A.storehouseID 

    UNION 

      select AD.ProductID, A.storehouseID, SUM(AD.Quantity) 
      from actions A inner join ProductTransfers T on A.ID = T.ID 
          inner join actiondetails AD on A.ID = AD.ID 
      where transferType = 0 
      group by AD.ProductID, A.storehouseID) as A1 

                 inner join 

      (select AD.productID, A.storehouseID, SUM(AD.Quantity) as Out 
      from actions A inner join ProductOut PO on A.ID = PO.ID 
          inner join actiondetails AD on AD.ID = A.ID 
      group by AD.ProductID, A.storehouseID 

    UNION 

      select AD.productID, A.storehouse.ID, SUM(AD.Quantity) as Out 
      from actions A inner join ProductTransfers T on A.ID = T.ID 
          inner join actiondetails AD on AD.ID = A.ID 
      where TransferType = 1 
      group by AD.ProductID, A.storehouseID) as A2 
      on A1.ProductID = A2.ProductID and A1.storehouseID = A2.storehouseID 
    group by A1.ProductID, A1.StorehouseID