[英]Access SQL query inner join & sum with null
表格:项目,采购,报价行。
项目具有字段ItemID,ItemName,IsActive
购买具有字段ItemID,QtyPurchased
QuoteLines具有字段ItemID,NegQty,IsSold
目标是选择IsActive = yes的所有ItemID,然后对所有QtyPurchased求和,并仅减去IsSold = yes的NeqQty。
我努力了:
SELECT Items.ItemID, Items.ItemName, IIF(NegQTY=NULL, SUM(QtyPurchased), SUM(NegQty+PurchasedQty)) AS Inv_Qty
FROM Purchases, Items, QuoteLines
WHERE Purchases.ItemID=Items.ItemID AND Items.ItemID=QuoteLines.ItemID
GROUP BY Items.ItemID, Items.ItemName;
结果导致“您的查询不包含指定的表达式IIF(NegQTY = NULL,SUM(QtyPurchased),SUM(NegQty + PurchasedQty))”
我还尝试了tblItems和tblPurchases之间的内部联接以获取PurchasedQty,然后在tblItems和tblQuoteLines之间进行第二次内部联接以仅获取SoldQty,然后在PurchasedQty和SoldQty之间进行左内部联接以获取InventoryQty,但这为在PurchasedQty和SoldQty中都存在的项目,但是对于仅在PurchasedQty中存在的项目,它返回NULL。
考虑使用保存的查询来计算购买的总单位和销售的总单位,然后在查询中使用那些保存的查询来计算当前库存。
创建一个名为[TotalPurchasedByItemID]的保存的查询
SELECT
Items.ItemID,
Sum(Purchases.QtyPurchased) AS SumOfQtyPurchased
FROM
Items
INNER JOIN
Purchases
ON Items.ItemID = Purchases.ItemID
WHERE (((Items.IsActive)=True))
GROUP BY Items.ItemID;
创建一个名为[TotalSoldByItemID]的保存的查询
SELECT
Items.ItemID,
Sum(QuoteLines.NegQty) AS SumOfNegQty
FROM
Items
INNER JOIN
QuoteLines
ON Items.ItemID = QuoteLines.ItemID
WHERE (((Items.IsActive)=True) AND ((QuoteLines.IsSold)=True))
GROUP BY Items.ItemID;
SELECT
Items.ItemID,
Items.ItemName,
Nz([SumOfQtyPurchased],0)-Nz([SumOfNegQty],0) AS Inv_Qty
FROM
(
Items
LEFT JOIN
TotalPurchasedByItemID
ON Items.ItemID = TotalPurchasedByItemID.ItemID
)
LEFT JOIN
TotalSoldByItemID
ON Items.ItemID = TotalSoldByItemID.ItemID
WHERE (((Items.IsActive)=True));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.