2016-12-14 106 views
0

我试图在MS Access中创建一个SQL查询,它将显示一个员工在当月有多少约会,即使它是0.它非常类似于this问题,但我无法让它与WHERE子句一起工作。SQL - 显示计数的记录,即使0

我有3个表:

tblEmployees 
-employeeID PK 
-FirstName ETC 

tblEngineersAppts1 
-ApptID PK 
-EmployeeID* 

tblEngineersAppts2 
-DiaryID PK 
-ApptDate 
-ApptID* 

我想告诉所有的员工,所有的约会(DiaryID)在tblEngineersAppts2即使有没有哪里ApptDate是当月的计数。 这是我的查询,它只显示当前月份有约会的员工,并不显示没有约会的员工。

SELECT tblEmployees.EmployeeID, Count(tblEngineersAppts2.DiaryID) AS CountOfDiaryID 
FROM (tblEmployees 
LEFT JOIN tblEngineersAppts1 ON tblEmployees.EmployeeID = tblEngineersAppts1.EmployeeID) 
LEFT JOIN tblEngineersAppts2 ON tblEngineersAppts1.ApptID = tblEngineersAppts2.ApptID 
WHERE (((Format$([ApptDate],'MM/YY'))='03/17')) 
GROUP BY tblEmployees.EmployeeID; 

感谢

+0

向我们展示样本数据和预期输出。 \t请阅读[**如何提问**](http://stackoverflow.com/help/how-to-ask) \t \t这里是一个伟大的地方[** START **] (http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)来了解如何提高您的问题质量并获得更好的答案。 –

回答

2

问题是,当你把WHERE条件你做出LEFT JOININNER JOIN

WHERE (((Format$([ApptDate],'MM/YY'))='03/17')) 

所以包括ApptDate建设不适用于ON条件。

SELECT tblEmployees.EmployeeID, Count(tblEngineersAppts2.DiaryID) AS CountOfDiaryID 
FROM (tblEmployees 
LEFT JOIN tblEngineersAppts1 ON tblEmployees.EmployeeID = tblEngineersAppts1.EmployeeID) 
LEFT JOIN tblEngineersAppts2 
    ON ( tblEngineersAppts1.ApptID = tblEngineersAppts2.ApptID 
    AND Format$([ApptDate],'MM/YY')='03/17' 
    ) 
GROUP BY tblEmployees.EmployeeID; 
+0

嗨,这给了我一个错误“不支持连接表达式”。应该提到即时通讯使用MS Access。 – user2435645

+1

是的,你应该。 :(...但看起来像只需要添加括号。在这里检查http://www.access-programmers.co.uk/forums/showthread.php?t=242171并让我知道。 –

+0

我几乎在那里。我可以根据需要显示结果,但是当我尝试在设计视图中显示时,我一直在Access中出现错误。这与Google的括号链接在一起。错误是“...不能表示连接表达式tblEngineersAppts1。 ApptID = tblEngineersAppts2.ApptID和格式设计视图中的$([ApptDate],'MM/YY')= '03/17' – user2435645

1

我想你可以做这样的事情:

SELECT 
    tblEmployees.EmployeeID, 
    (
     SELECT Count(tblEngineersAppts2.DiaryID) 
     FROM tblEngineersAppts1 
     JOIN tblEngineersAppts2 ON tblEngineersAppts1.ApptID = tblEngineersAppts2.ApptID 
     WHERE tblEmployees.EmployeeID = tblEngineersAppts1.EmployeeID 
     AND (((Format$([ApptDate],'MM/YY'))='03/17')) 
    ) AS CountOfDiaryID 
FROM 
    tblEmployees