MS-Access 中的 SQL:使用 COUNT、JOIN 并返回 0

Posted

技术标签:

【中文标题】MS-Access 中的 SQL:使用 COUNT、JOIN 并返回 0【英文标题】:SQL in MS-Access: Using COUNT, JOIN and returning 0s 【发布时间】:2010-08-04 14:37:42 【问题描述】:

很抱歉发布此内容,但尽管网站上有一些示例,但我无法让我的工作。

所以我有两个表如下:

电话桌

ID | Name | GradeID
1    Richard   1
2    Allan     1
3    Peter

我还有一个成绩表:

ID | Name
1    1
2    2
3    3
4    4
5    5

无论如何,我正在尝试使用 COUNT() 和 LEFT JOIN 来找出在 Telephony 表中找到每个等级的次数,包括使用以下查询返回任何为 0 的等级:

SELECT telephony.GradeID, COUNT(*) AS Total
FROM telephony LEFT JOIN grade 
ON telephony.GradeID = grade.ID
GROUP BY telephony.GradeID
ORDER BY 1;

此查询返回所有找到的但不会返回所有包含 0 个条目的成绩:

Grade | Total
1       2

请帮忙。我正在使用 Microsoft Access 2003。


感谢您的所有帮助。效果很好。

但是,当我尝试合并 DATE BETWEEN 时,它只会返回再次找到的成绩。

有什么想法吗?

谢谢

【问题讨论】:

Peter 的 GradeID 是多少?空? 【参考方案1】:

我想这就是你要找的东西:

SELECT grade.ID, Count(telephony.ID) AS CountOfID
FROM grade LEFT JOIN telephony ON grade.ID= telephony.GradeID
GROUP BY grade.ID
ORDER BY 1;

顺便说一句:“名称”对于列来说是一个非常糟糕的名称,因为它是一个保留字。

【讨论】:

告诉我。我被一个数据库困住了,其中每个表都有 ID 和名称列。【参考方案2】:

由于只有 Grade 表包含所有可用 ID,因此您应该在 SELECT 中使用grade.ID 而不是 telephony.GradeID。尝试执行这个查询:

SELECT grade.ID, COUNT(telephony.ID) FROM grade
LEFT JOIN telephony ON telephony.GradeID = grade.ID
GROUP BY grade.ID
ORDER BY 1;

【讨论】:

以上是关于MS-Access 中的 SQL:使用 COUNT、JOIN 并返回 0的主要内容,如果未能解决你的问题,请参考以下文章

RODBC 与 ms-access 错误 07002 17 [Microsoft][ODBC Microsoft Access Driver]COUNT 字段不正确

为啥 MS-Access 中的 Teradata 查询比 SQL Server 更快

SQL/ms-access 中的条件仅考虑月份中的某一天,而不是完整日期

编辑器中的 ms-access VBA 长 sql 查询字符串行拆分(内联双引号)

加入sql还是ms-access?

如何检索 MS-Access 中的最后一个自动增量值,例如 Sql Server 中的 @@Identity