как группировать по каждому возможному часу? - PullRequest
0 голосов
/ 11 февраля 2019

Мне нужно создать отчет, который показывает количество блоков, созданных за каждый час в текущей дате.

если не было создано ни одного блока, мне нужно отобразить час и 0 рядом с ним.

Я должен использовать для этого доступ.Я пробовал много вещей, но единственный скомпилированный код был этот.

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

мой код дает мне часы, в которые были созданы блоки, но я не могу понять, как добавить те часы, когда блоки не были созданы.

1 Ответ

0 голосов
/ 11 февраля 2019

Вы можете создать небольшой запрос, чтобы получить 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 , либо установите Формат , где отображаются значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...