如何解决MS Access:每小时显示计数即使时间段内没有记录
我被卡住了,我认为它应该很简单,但无法让它工作。我有一个包含一天中所有时间的“tbTiMetable”表。
tbTiMetable(只显示前5条记录,但会在23:00结束(共24条记录)
| ID | TimeStart | TimeStop |
|1 | 0:00 | 1:00 |
|2 | 1:00 | 2:00 |
|3 | 2:00 | 3:00 |
|4 | 3:00 | 4:00 |
|5 | 4:00 | 5:00 |
我有一个总计查询 qryPartCountTotalsPerHour,其中包含每小时的零件计数。
| DateIn | PartCount | PeriodIn | PerdiodOut |
|19-5-2021 | 221 |0:00 | 1:00 |
|19-5-2021 | 203 |1:00 | 2:00 |
|19-5-2021 | 201 |2:00 | 3:00 |
|19-5-2021 | 215 |6:00 | 7:00 |
|19-5-2021 | 174 |7:00 | 8:00 |
我想要的是显示一天中所有小时的零件计数结果,如果该小时内没有记录,则在零件计数中显示 0。因此,DateIn 字段中的每个日期应至少显示 24 条记录。
我试过了:
SELECT qryPartCountTotalsPerHour.DateIn,qryPartCountTotalsPerHour.PartCount,qryPartCountTotalsPerHour.Periodout,qryPartCountTotalsPerHour.Periodout
FROM tbTiMetable LEFT JOIN qryPartCountTotalsPerHour ON tbTiMetable.TimeStart = qryPartCountTotalsPerHour.PeriodIn
ORDER BY qryPartCountTotalsPerHour.DateIn;
我还尝试使用 Hour() 函数将 PeriodIn 和 TimeStart 仅转换为“小时”,但没有任何效果。我在某处出错但找不到。
编辑:试图澄清 DateIn 包含多个日期。
解决方法
你很近。您需要按第一个表聚合:
SELECT t.PeriodIn,NZ(q.PartCount),q.PeriodOut,q.PeriodOut
FROM tbTimeTable as t LEFT JOIN
qryPartCountTotalsPerHour as q
ON t.TimeStart = qryPqrtCountTotalsPerHour.PeriodIn
ORDER BY t.PeriodIn;
这适用于您的示例数据。如果涉及的天数越多,情况可能会变得更加复杂。
,所以我找到了答案。这 topic 帮助我得到了答案,特别是来自 Ken Sheridan 和他的公共数据库“付款”的答案。这个数据库应该给你足够的信息来解决这个或类似的问题。不过,我会简要介绍一下我所做的。
所以我用时间表和所有日志日期(它们之间没有关系)创建了一个名为 qryCalendar 的查询。这导致了每个记录日期的完整时间表。
然后我创建了一个新查询来显示最终结果:
SELECT qryCalendar.Date,qryCalendar.TimeStop,qryCalendar.TimeStart,Nz([qryPartCountTotalsPerHour].[PartCount],0) AS tPartCount
FROM qryCalendar LEFT JOIN qryPartCountTotalsPerHour ON (qryCalendar.TimeStop = qryPartCountTotalsPerHour.PeriodOut) AND (qryCalendar.Date = qryPartCountTotalsPerHour.DateIn)
ORDER BY qryCalendar.Date,qryCalendar.TimeStart;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。