2017-08-04 2 views
0

Ich erstelle eine Inventarabfrage und der untenstehende Code (meistens) funktioniert, aber es enthält Rechnungen, die storniert wurden, was zu negativem Inventar führt.MS Zugriff auf mehrere Joins mit Kriterien

Ich kann nicht herausfinden, wie sichergestellt werden kann, dass dies keine Rechnungen enthält, die ungültig gemacht wurden. Vielen Dank im Voraus für Ihre Hilfe!

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; 

Antwort

0

es auf diese Weise versuchen:

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.- Zuerst nur JOIN statt LEFT JOIN verwenden, so dass Sie nur die Zeilen erhalten, die Werte in beiden Tabellen haben.

2.- Sie erhalten nur die Produkte, die tblInvoices.Void='Yes'

+0

wie ein Zauber gearbeitet haben, Nacho - vielen Dank! Ich habe "Ja" zu "Falsch" geändert und es hat funktioniert. Vielen Dank! –