我在MS Access 2013中使用此语法时遇到了困难。我的表包含多年的数据。我想写一个年度比较数据的查询。以下不会运行,只会生成JOIN expression not supported.
:
SELECT c.Year, c.Company, c.HavePlan, ly.HavePlan
FROM plan_data AS c
LEFT JOIN plan_data AS ly
ON c.Company = ly.Company AND ly.Year = 2014
WHERE c.Year = 2015
ORDER BY c.Company;
我也尝试在SELECT语句中使用子查询,但如果我想比较50个数据字段,则代码变得非常复杂。例如,我尝试将ly.HavePlan
替换为:
(SELECT HavePlan FROM plan_data WHERE Year = 2014) AS LyHavePlan
我做了一点改进,如下所示:
SELECT DISTINCT c.Year, c.Company, c.[Plan #], c.HavePlan, ly.HavePlan
FROM plan_data AS c
LEFT JOIN plan_data AS ly
ON c.Company = ly.Company
WHERE c.Year = 2015 AND ly.Year = 2014
ORDER BY c.Company;
然而,这只给了我这两年的公司,而且还有那些2014年没有的公司,我不想这样做。我想比较两年,但保持公司最近一年。他们只是没有比去年有什么可比的。
似乎去年需要在JOIN中指定数据。
答案 0 :(得分:1)
您可以通过将SpannableStringBuilder
条件括在括号中来避免“不支持JOIN表达式”错误。
我在Access 2010中测试了这个查询...
ON
Access查询设计器会抱怨它无法在设计视图中显示该连接。但是,当从 SQL View 进行编辑和测试时,它运行良好。
另一种方法是使SELECT c.Year, c.Company, c.HavePlan, ly.HavePlan
FROM
plan_data AS c
LEFT JOIN plan_data AS ly
ON (c.Company = ly.Company AND ly.Year = 2014)
WHERE c.Year = 2015
ORDER BY c.Company;
成为子查询并将ly
约束移动到suquery的Year = 2014
子句......因此在连接的WHERE
子句中不需要它...
ON