简体   繁体   English

MS Access具有条件的多个联接

[英]MS Access multiple joins with criteria

I'm generating an Inventory Query and the below code (mostly) works but it includes Invoices that have been voided, resulting in negative inventory. 我正在生成一个库存查询,以下代码(大多数情况下)有效,但其中包含已作废的发票,从而导致了负库存。

Void Yes/No field = tblInvoices.Void

tblInvoiceDetails.InvoiceNum = tblInvoices.ID

I can't figure out how to ensure this does not include invoices that were voided. 我不知道如何确保这不包括已作废的发票。 Thank you in advance for your help! 预先感谢您的帮助!

SELECT tblInventory.ID, Nz(sumTotalPaid,0)-Nz(sumCreditAmount,0) AS Quantity
FROM (tblInventory 
LEFT JOIN (
    SELECT ProductID, Sum(Quantity) AS sumTotalPaid
    FROM tblOrderDetails
    GROUP BY tblOrderDetails.ProductID
)  AS sum1 
   ON tblInventory.ID = sum1.ProductID) 
LEFT JOIN (
    SELECT ProductID, Sum(Quantity) AS sumCreditAmount
    FROM tblInvoiceDetails
    GROUP BY tblInvoiceDetails.ProductID
)  AS sum2 
    ON tblInventory.ID = sum2.ProductID;

Try it this way: 尝试这种方式:

SELECT tblInventory.ID, Nz(sumTotalPaid,0)-Nz(sumCreditAmount,0) AS Quantity
FROM (tblInventory  
JOIN (
    SELECT ProductID, Sum(Quantity) AS sumTotalPaid
    FROM tblOrderDetails
    GROUP BY tblOrderDetails.ProductID
)  AS sum1 
   ON tblInventory.ID = sum1.ProductID) 
JOIN (
    SELECT ProductID, Sum(Quantity) AS sumCreditAmount
    FROM tblInvoiceDetails
    WHERE tblInvoiceDetails.InvoiceNum IN 
        (SELECT tblInvoices.ID
        FROM tblInvoices
        WHERE tblInvoices.Void='Yes')
    GROUP BY tblInvoiceDetails.ProductID
)  AS sum2 
    ON tblInventory.ID = sum2.ProductID

1.- First you use just JOIN instead of LEFT JOIN , so you just get the rows that have values in both tables. 1.-首先,您只使用JOIN而不是LEFT JOIN ,所以您只需要获得在两个表中都具有值的行。

2.- You get only the Products that have the tblInvoices.Void='Yes' 2.-您仅获得具有tblInvoices.Void='Yes'

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM