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 中的条件仅考虑月份中的某一天,而不是完整日期