--oracle-specific syntax
with MONTHS as (
--current month
SELECT TO_DATE(to_char(sysdate,'mm') || '/1/' || to_char(sysdate,'yyyy'),'mm/dd/yyyy') date_field, 0 measure_value
FROM DUAL
UNION
--prior month
SELECT add_months(TO_DATE(TO_CHAR(SYSDATE,'mm') || '/1/' || TO_CHAR(SYSDATE,'yyyy'),'mm/dd/yyyy'),-1) date_field, 0 measure_value
FROM DUAL
--continue for remaining 22 months
),
DATA AS (
SELECT date_field, COUNT(measure_field) measure_value
FROM table
GROUP BY date_field
)
SELECT *
from data
UNION
SELECT *
FROM MONTHS m
WHERE NOT EXISTS (
SELECT 1
FROM data d
where m.date_field=d.date_field
)
Это будет иметь смысл для вас, чтобы создать определенную пользователем функцию, которая будет возвращать таблицу значений даты, а не все операторы UNION.
Используйте этот запрос в объекте Command отчета.
Это довольно расплывчато. Я бы создал SP, который сделал всю необходимую вам группировку. Должно быть много документов о том, как использовать контрольно-измерительную систему кристалла. – Jeremy
Спасибо за ответ, но не могли бы вы расширить термин SP? :-) – 2010-04-29 17:40:08
ладно, извините, только что получил, хранимую процедуру. Я бы хотел сделать это без серверного программирования. Я попытался добавить представление, в котором добавлены фиктивные кортежи, которые всегда были 24-месячными, для источника данных, а производительность хрустальных отчетов ухудшалась до такой степени, что она больше не использовалась. Я думаю, что добавление объектов в базу данных только для того, чтобы заставить Crystal Reports отображать то, что я хочу, это очень уродливый дизайн. – 2010-04-29 17:49:16