【问题标题】:MS Access multiple joins with criteriaMS 使用条件访问多个连接
【发布时间】:2017-08-04 06:52:57
【问题描述】:

我正在生成一个库存查询,下面的代码(大部分)有效,但它包含已作废的发票,导致库存为负。

Void Yes/No field = tblInvoices.Void

tblInvoiceDetails.InvoiceNum = tblInvoices.ID

我不知道如何确保这不包括已作废的发票。提前感谢您的帮助!

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;

【问题讨论】:

    标签: sql ms-access-2016


    【解决方案1】:

    试试这个方法:

    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.- 首先您只使用JOIN 而不是LEFT JOIN,因此您只需获取两个表中都有值的行。

    2.- 您只获得具有tblInvoices.Void='Yes' 的产品

    【讨论】:

    • 工作就像一个魅力,纳乔 - 谢谢!我将“是”更改为 False,它起作用了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多