Access 2007 - Linke Verknüpfung zu einer Abfrage gibt #Error anstelle von Null zurück

Ähnlich wie diese Frage, aber ihr Problem mit der Abfrage wurde nie vollständig gelöst:

#Fehler in mehreren LEFT JOIN-Anweisungen Zugriffsabfrage, wenn der Wert NULL sein soll

Ich erhalte #Error, wenn ich einen Nullwert erwarte, wenn ein linker Join ausgeführt wird, bei dem kein entsprechender Datensatz auf der rechten Seite des Joins vorhanden ist:

Chain               CasesPerMonthPerStore   MonthOfFirstOrder
Naturally           2.3                     5/1/2011
Tom's Market        #Error
Livingstons         #Error
EverClear           3.1                     7/1/2012
Bob's Market        2.66                    5/1/2012
Andy's Exports      #Error
Jamestowns          0.89                    7/1/2012

Es funktioniert einwandfrei, wenn ich die Daten in eine Tabelle kopiere und die Verknüpfung mit dieser Tabelle belasse. Daher gehe ich davon aus, dass etwas in der Syntax der Abfrage nicht stimmt:

SELECT 
    MonthRange.Chain,
    MonthRange.CasesShipped/IIf(MonthsSinceFirstOrder.Months>DateDiff("m",QueryDates.StartDate,QueryDates.EndDate)+1,
                                DateDiff("m",QueryDates.StartDate,QueryDates.EndDate)+1,
                                MonthsSinceFirstOrder.Months)/NumStores.NumberOfStores AS CasesPerMonthPerStore,
    MonthsSinceFirstOrder.MonthOfFirstOrder
FROM 
    QueryDates, 
    (
        MonthRange 
        INNER JOIN 
        NumStores 
            ON MonthRange.Chain=NumStores.Chain
    ) 
    INNER JOIN 
    MonthsSinceFirstOrder 
        ON MonthRange.Chain=MonthsSinceFirstOrder.Chain;

Dieser SQL-Code gibt die korrekten Ergebnisse zurück. Es ist nur sein Verhalten, wenn Left Joining to it #Errors zurückgibt.

nb die seltsame Iif-Anweisung in der Mitte prüft, ob die Anzahl der Monate seit der ersten Bestellung größer ist als die Anzahl der Monate im angegebenen Datumsbereich - also wenn der Datumsbereich 6 Monate umfasst und die erste Bestellung 9 Monate zuvor war Für das Enddatum wird 6 verwendet. Wenn die erste Bestellung nur 4 Monate vor dem Enddatum war, wird 4 verwendet.

- UPDATE BEARBEITEN -

Richtig, ich habe die Elemente der Abfrage nacheinander entfernt. Dies ist die einfachste Methode, die ich erhalten kann, während der Verbindungsfehler für die linke Seite erneut erstellt wird:

SELECT 
    MonthRange.Chain, 
    DateDiff("m",QueryDates.StartDate,QueryDates.EndDate)+1 AS CasesPerMonthPerStore
FROM 
    QueryDates, 
    MonthRange;

Und so komme ich dazu:

SELECT 
    Chains.Chain, 
    ErrorQuery.CasesPerMonthPerStore
FROM 
    Chains 
    LEFT JOIN 
    ErrorQuery 
        ON Chains.Chain=ErrorQuery.Chain;

Sieht irgendetwas in dieser SQL falsch aus?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage