MS Access JOIN相同的表或查询,允许比较同一个表中的数据

时间:2016-03-07 18:35:07

标签: sql ms-access

我在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中指定数据。

1 个答案:

答案 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