Я пишу отчет в Crystal Reports XI Developer, который выполняет хранимую процедуру в базе данных SQL Server 2005. Набор записей возвращает сводку из таблицы журнала, сгруппированной по дням и часам.
В настоящее время мой запрос выглядит примерно так:
SELECT
sum(colA) as "Total 1",
day(convert(smalldatetime, convert(float, Timestamp) / 1440 - 1)) as "Date",
datepart(hh, convert(smalldatetime, convert(float, Timestamp) / 1440 - 1)) as "Hour"
`etc...`
GROUP BY
Day, Hour
Не обращайте внимания на безумие в отношении дат, я думаю, что разработчики систем сильно пили, когда они решали, как хранить свои даты.
Моя проблема заключается в следующем: поскольку не всегда есть записи по каждому часу дня, я получаю пробелы, которые понятны, но я бы хотел, чтобы Crystal могла отчитываться за все 24 часа независимо от того, есть ли данные или нет.
Я знаю, что могу изменить это, поместив весь запрос в цикл WHILE
(в пределах хранимой процедуры) и выполняя запросы в отдельные часы, но что-то внутри меня говорит, что один запрос лучше, чем 24.
Я хотел бы знать, есть ли способ заставить Crystal выполнять итерацию по часам дня, а не итерацию по строкам в таблице, как обычно.
В качестве альтернативы, есть ли способ отформатировать запрос так, чтобы он включал пустые строки часа, не убивая мой сервер базы данных?