1

私はこれに頭を悩ませていますが、それは私が考えているほど難しいことではないと思います。事実上、私がやろうとしていることは次のとおりです。

すべての地域に適用される休日タイプ1の日を除外して、月間平均売上高を計算します(たとえば、特定の地域ではこれをタイプ2に変更できます)。

SELECT Year(Date) AS Year, Month(Date) AS Month, Avg(tblSales.Sales) AS AvgSales
FROM tblSales
LEFT JOIN tblHolidays
ON tblSales.[Date] >= tblHolidays.[Date From] AND tblSales.[Date] <= tblHolidays.[Date To] 
WHERE tblHolidays.[Date From] Is Null AND tblHolidays.[Type]<> 1 AND tblHolidays.[Region]<>"All"
GROUP BY Year(Date), Month(Date);

今のところ、これが機能しているかどうかはわかりませんが、結果は得られます。私が見ていないのは、tblHolidaysにタイプ2とタイプ3の休日、またはtblSales。[Date]と比較したときに特定の地域に適用される休日を使用しないように指示しているところです。

何か案は?

4

1 に答える 1

0

これは本当にあなたが意味することです。

SELECT Year(Date) AS Year, Month(Date) AS Month, Avg(tblSales.Sales) AS AvgSales
FROM tblSales
LEFT JOIN tblHolidays
     ON tblSales.[Date] >= tblHolidays.[Date From]
        AND tblSales.[Date] <= tblHolidays.[Date To]
        AND tblHolidays.[Type] = 1 AND tblHolidays.[Region] = "All"
WHERE tblHolidays.[Date From] Is Null
GROUP BY Year(Date), Month(Date);

LEFT JOINは、句内のすべての条件でtblSalesと一致するtblHolidaysから一致を取り込むのに役立ちONます。この場合、それは言っています:

  1. タイプ1で、「すべての」地域に影響を与える、販売日をカバーする休日を検索します。

LEFT JOINの性質により、tblHolidaysから一致するものが見つからなかった場合でも、tblSalesからのすべての行が保持されます。次に、一致見つかった場合、フィルターを使用してそれらを削除しますtblHolidays.[Date From] Is Null。休日条件が見つかった場所はnullでtblHolidays.[Date From]ないためです。

于 2012-11-19T05:18:18.097 に答える