SQLデータベースで実行すると次の結果を出力するクエリがあります
CreatedDate QuoteNumber NumberOfLicensedDrivers
2012-07-01 10:38:49.157 48641 0
2012-07-01 18:35:38.680 48650 2
2012-07-02 08:44:33.770 48670 1
2012-07-02 09:12:09.447 48700 0
この投稿のためにクエリを簡略化しましたが、基本的には次のとおりです。
SELECT DISTINCT
CreatedDate,
QuoteNumber,
count([DriversLicense]) as NumberOfLicensedDrivers
FROM table1 LEFT OUTER JOIN table2 on table2.QuoteID = table1.ID
WHERE CreatedDate > '7/1/2012'
GROUP BY QuoteNumber, CreatedDate
ORDER BY CreatedDate ASC
このクエリにより、期待される出力が得られます。すべての引用符を出力に表示したいと思います。ドライバーが0の場合、0を表示したいと思います。問題は、リンクされたテーブルを使用したMSアクセスで同じ結果を作成する必要があることです。MS Accessの出力では、期待した結果が得られません。
これが私がMSACCESSに使用するクエリです
SELECT DISTINCT
quote.CreatedDate,
quote.QuoteNumber,
count(quoteDrivers.DriversLicense) As NumberOfLicensedDrivers
FROM quote
LEFT JOIN quoteDrivers ON quote.ID = quoteDrivers.QuoteID
WHERE (quote.CreatedDate>#7/1/2012#)
GROUP BY quote.CreatedDate, quote.QuoteNumber
ORDER BY quote.CreatedDate;
出力には、ライセンスされたドライバーは表示されません。
CreatedDate QuoteNumber NumberOfLicensedDrivers
7/1/2012 10:38:49 AM 48641 0
7/1/2012 6:35:39 PM 48650 0
7/2/2012 8:44:34 AM 48670 0
7/2/2012 9:12:09 AM 48700 0
ただし、quoteDriversテーブルに対してWHERE句を追加すると、次のようになります。
SELECT DISTINCT
quote.CreatedDate,
quote.QuoteNumber,
count(quoteDrivers.DriversLicense) As NumberOfLicensedDrivers
FROM quote
LEFT JOIN quoteDrivers ON quote.ID = quoteDrivers.QuoteID
WHERE (quote.CreatedDate>#7/1/2012#)
and quoteDrivers.DriverAddedDate >#1/1/2012# ''Added this
GROUP BY quote.CreatedDate, quote.QuoteNumber
ORDER BY quote.CreatedDate;
期待どおりの結果が得られます(ドライバーが0の場合の見積もりを差し引いたもの)
CreatedDate QuoteNumber NumberOfLicensedDrivers
7/1/2012 6:35:39 PM 48650 2
7/2/2012 8:44:34 AM 48670 1
quoteDriversテーブルのwhere句に列を指定せずにドライバーの数を取得できない理由を誰かが説明できますか?