首页 > 解决方案 > 如何按小时分组?

问题描述

我需要创建一个报告,显示当前日期每小时创建的块数。

如果没有创建块,我需要在它旁边显示小时和 0。

我必须为此使用访问权限。我尝试了很多东西,但编译的唯一代码就是这个。

SELECT Hour(DateOfCreation) As Hour , Count(*) AS amount
FROM tblBlock
WHERE DateOfCreation = Date ()
GROUP BY Hour(DateOfCreation) 

我的代码给了我创建块的时间,但我不知道如何添加没有创建块的时间。

标签: sqlms-access

解决方案


您可以创建一个小查询来为您提供 10 个数字:

SELECT DISTINCT Abs([id] Mod 10) AS N
FROM MSysObjects;

将此保存为并在另一个查询中使用它两次:

SELECT TimeSerial([Ten_0].[N]+[Ten_1].[N]*10,0,0) AS [Hour]
FROM Ten AS Ten_0, Ten AS Ten_1
WHERE ((([Ten_0].[N]+[Ten_1].[N]*10)<24))
ORDER BY TimeSerial([Ten_0].[N]+[Ten_1].[N]*10,0,0);

要返回整数小时(以匹配您的查询),请使用以下变体:

SELECT [Ten_0].[N]+[Ten_1].[N]*10 AS [Hour]
FROM Ten AS Ten_0, Ten AS Ten_1
WHERE ((([Ten_0].[N]+[Ten_1].[N]*10)<24))
ORDER BY TimeSerial([Ten_0].[N]+[Ten_1].[N]*10,0,0);

现在,要么修改它以包含您的原始查询,要么在第三个查询中使用它,您可以在上面的查询时间和原始查询的时间之间创建一个外连接。它可能是这样的:

SELECT HoursOneDay.Hour, YourQuery.Amount
FROM HoursOneDay 
LEFT JOIN YourQuery ON HoursOneDay.Hour = YourQuery.Hour;

对于没有小时数的条目,金额字段将为空。应用Nz或设置显示值的格式


推荐阅读