,我认为它应该工作专卖店,我书面方式它在旅途所以不能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
这是一个非常不合理的股票系统设计。你能改变设计(至少有一点)吗?如果我理解正确,那么您为每种类型的库存更改添加/有一张表,您可以并应该实际上只添加一个带有类型的列(尽管不需要,您仍可以获取附加表以获取其他特定信息) ,也可能是商店专栏,但我想这不符合你的设计理念。你的模型就像一个商店添加到一个真正的通用行动模型,而不是一个商店。 – Solarflare
否则,您可以将所有的动作表连接在一起,然后使用'sum(productin.id为null的情况,然后actiondetails.Quantity else 0结束)+ sum(productout.id则为--actiondetails.Quantity其他0结束)+ ...'或类似的东西。 – Solarflare