この質問に似ていますが、クエリに関する問題は完全には解決されませんでした:
#複数の LEFT JOIN ステートメントで表示されるエラー 値が NULL である必要があるアクセス クエリ
結合の右側に対応するレコードがない左結合を行うときに、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 を返すのは、Left Joining 時の動作だけです。
nb 途中の奇妙な Iif ステートメントは、最初の注文からの月数が、指定された日付範囲に含まれる月数よりも大きいかどうかを確認します。つまり、日付範囲が 6 か月で、最初の注文が 9 か月前だった場合終了日。6 を使用します。最初の注文が終了日のわずか 4 か月前の場合、4 が使用されます。
-- 編集の更新 --
そうです、クエリの要素を 1 つずつ取り出しました。これは、左側の結合エラーを再現しながら取得できる最も単純なものです。
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 に何か問題がありますか?