2016-12-14 8 views
0

Я пытаюсь создать SQL-запрос в MS Access, который покажет, сколько встреч у сотрудника будет в текущем месяце, даже если оно равно 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 Пожалуйста, прочитайте [** How-to-Ask **] (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 constr aint в состоянии 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

Привет, это дает мне ошибку "Присоединение выражения не поддерживается". Следует упомянуть, что im использует MS Access. – user2435645

+1

Да, вы должны. :(... но похоже, что нужно только скопировать скобки. Проверьте здесь http://www.access-programmers.co.uk/forums/showthread.php?t=242171 и дайте мне знать. –

+0

Я почти там. Я могу получить результаты, которые будут отображаться по желанию, но я все время получаю сообщение об ошибке в Access при попытке отобразить в представлении дизайна. Это связано с круглыми скобками в соответствии с Google. Ошибка: «... Cant представляет выражение join tblEngineersAppts1. ApptID = tblEngineersAppts2.ApptID AND Format $ ([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