试图弄清楚如何让这个JOIN正常工作。坐了大约30分钟。有人可以帮我吗?我试图从另一种形式中减去一种形式,以查看发票数量和库存量之间的差异。
SELECT Invoice.NameOfItem, SUM(Inventory.Volume - Invoice.Quantity) As TotalNeeded
FROM Invoice
INNER JOIN Inventory
ON Invoice.NameOfItem=Inventory.NameOfItem
GROUP BY Invoice.NameOfItem;
问题是输出不正确。
SELECT NameOfItem, SUM(Quantity) AS TotalNumberNeeded From Invoice GROUP BY NameOfItem
减去
SELECT NameOfItem, SUM(Volume) AS TotalNumberNeeded From Inventory GROUP BY NameOfItem
是= -112。输出目前是“992”
答案 0 :(得分:1)
我认为您需要为表格提供别名
SELECT a.NameOfItem, SUM(b.Volume - a.Quantity) As TotalNeeded
FROM Invoice a
INNER JOIN Inventory b
ON a.NameOfItem=b.NameOfItem
GROUP BY a.NameOfItem;
答案 1 :(得分:1)
您需要在执行join
之前聚合数据。在MS Access中,您可以执行以下操作:
SELECT Invo.NameOfItem, (inventory - invoice) As TotalNeeded
FROM (SELECT NameOfItem, SUM(Volume) as invoice
FROM Invoice
GROUP BY NameOfItem
) as invo INNER JOIN
(SELECT NameOfItem, SUM(Quantity) as inventory
FROM Inventory
GROUP BY NameOfItem
) as inve
ON Invo.NameOfItem = Inve.NameOfItem;
答案 2 :(得分:1)
我只能假设您的表格看起来像什么,因为您没有包含这些关系或那些信息,但根据我的经验,可能只有一个项目的库存记录和发票中的多个记录。
因此,考虑到这一假设,您需要从库存中与其匹配的一个项目记录中减去一个项目的所有发票条目的所有总和。
最后 - TotalNeeded - 对我的字段名称没有意义 - 它真的反映了“TotalRemaining”
最后终于......我假设您想要所有库存 - 而不仅仅是发票
考虑到所有这些 - 这可能会起作用
SELECT Inventory.NameOfItem, (Inventory.Volume - nz(t2.TotalSold,0)) As TotalRemaining
FROM Inventory
LEFT JOIN
(SELECT Invoice.NameOfItem, Sum(Invoice.Quantity) AS TotalSold
FROM Invoice
GROUP BY Invoice.NameOfItem) t2
ON Inventory.NameOfItem = t2.NameOfItem
答案 3 :(得分:1)
当您将广告资源加入发票时,每个数量使用相同的 NameOfItem ,您可以从广告资源中获取该广告资源。
因此,您说,您在发票表中有以下数据[{NameOfItem: 'A', Quantity: 1}, {NameOfItem: 'A', Quantity: 2}, {NameOfItem: 'B', Quantity: 1}]
,在库存表格中有[{NameOfItem: 'A', Volume: 5}, {NameOfItem: 'B', Volume: 6}]
。
加入后,您将拥有[{NameOfItem: 'A', Quantity: 1, Volume: 5}, {NameOfItem: 'A', Quantity: 2, Volume: 5}, {NameOfItem: 'B', Quantity: 1, Volume: 6}]
希望现在很明显,您需要事先将数据分组到Invoice表中。