【问题标题】:SQL - Display Count of records even if 0SQL - 显示记录计数,即使为 0
【发布时间】:2017-04-29 22:14:51
【问题描述】:

我正在尝试在 MS Access 中创建一个 SQL 查询,该查询将显示员工在当月有多少约会,即使它是 0。它与this 问题非常相似,但我不能让它与 WHERE 子句一起工作。

我有 3 张桌子:

tblEmployees
-employeeID PK
-FirstName ETC

tblEngineersAppts1
-ApptID PK
-EmployeeID*

tblEngineersAppts2
-DiaryID PK
-ApptDate
-ApptID*

我想向所有员工显示 tblEngineersAppts2 中所有约会 (DiaryID) 的 COUNT,即使 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;

谢谢

【问题讨论】:

  • 向我们展示示例数据和预期输出。请阅读How-to-Ask 这里是START 了解如何提高问题质量并获得更好答案的好地方。

标签: sql ms-access count left-join inner-join


【解决方案1】:

问题在于,当您将WHERE 条件设为LEFT JOIN 时,INNER JOIN

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

所以在ON 条件中包含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
     AND Format$([ApptDate],'MM/YY')='03/17'
     )
GROUP BY tblEmployees.EmployeeID;

【讨论】:

  • 嗨,这给了我一个错误“不支持连接表达式”。应该提到我正在使用 MS Access。
  • 是的,你应该这样做。 :( ...但看起来只需要添加括号。检查这里access-programmers.co.uk/forums/showthread.php?t=242171并让我知道。
  • 我快到了。我可以根据需要显示结果,但是在尝试在设计视图中显示时,我在 Access 中不断出现错误。根据谷歌,这与括号相关联。错误是“...不能表示设计视图中的连接表达式 tblEngineersAppts1.ApptID = tblEngineersAppts2.ApptID AND Format$([ApptDate],'MM/YY') = '03/17'
【解决方案2】:

我认为你可以这样做:

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

【讨论】:

    猜你喜欢
    • 2013-03-09
    • 1970-01-01
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-17
    相关资源
    最近更新 更多