Access 2007 - при левом присоединении к запросу возвращается #Error вместо Null

Аналогично этому вопросу, но проблема с запросом так и не была полностью решена:

# Ошибка, отображаемая в нескольких операторах LEFT JOIN Запрос доступа, когда значение должно быть NULL

Я получаю #Error, когда я 'ожидая увидеть нулевое значение при выполнении левого соединения, где нет соответствующей записи в правой части соединения:

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

Это прекрасно работает, если я скопирую данные в таблицу и оставлю соединение с этой таблицей, поэтому я предполагаю, что в синтаксисе запроса что-то не так:

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;

Этот SQL возвращает правильные результаты, это 'Просто его поведение, когда левый присоединяется к нему, который возвращает #Errors.

Обратите внимание на странный оператор Iif в промежуточных проверках, чтобы увидеть, больше ли количество месяцев с первого заказа, чем количество месяцев, включенных в указанный диапазон дат - так, если диапазон дат имеет 6 месяцев, а первый заказ был за 9 месяцев до дата окончания - 6; если первый заказ был только 4 месяца до даты окончания, он использует 4.

- РЕДАКТИРОВАТЬ ОБНОВЛЕНИЕ -

Правильно, я вынул элементы запроса один за другим, и это самое простое, что я могу получить, все еще воссоздав левую ошибку соединения:

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

И вот как ям осталось присоединиться к нему:

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

Что-нибудь в этом SQL выглядит неправильно?

Ответы на вопрос(3)

Ваш ответ на вопрос