2012-11-19 58 views
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]。

任何想法?

+0

起初您需要做的是在正确连接您的表“tblHolidays”和“tblSales”之后。 – polin

回答

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用于在比赛中把从那里上ON子句中的所有条件相匹配tblSales tblHolidays。在这种情况下,它是这样说的:

  1. 查找涵盖销售日期的假期,它是类型1并影响“所有”区域。

由于LEFT JOIN性质,即使没有从tblHolidays找到任何匹配,它也会保留来自tblSales的所有行。接下来,在找到匹配项,我们使用筛选器tblHolidays.[Date From] Is Null将其关闭。因为tblHolidays.[Date From]而不是 null发现假期条件。

+0

感谢您的答复 - 我以前曾尝试过,但在Access 2007中出现以下错误:JOIN表达式不受支持,并突出显示“tblHolidays。[Type] = 1” – user1834808

+0

我想我找到了解决方案: http://social.msdn.microsoft.com/Forums/ta/accessdev/thread/15c36745-f7a4-4926-9687-7161e5894468 您需要在'开'后添加圆括号, – user1834808