Отображение группы без данных в Crystal Reports 12 - PullRequest
3 голосов
/ 04 октября 2010

Я пытаюсь сгруппировать данные по возрасту. Я использую следующую базу данных выбора:

select * from (
select 0 range_start, 11 range_end, '0-10 days' date_description from dual union
select 11, 21, '11-20 days' from dual union  
select 21, 31, '21-30 days' from dual union  
select 31, 99999, '31+ days' from dual) date_helper
left outer join table
on table.date <= date_helper.range_start*-1 + sysdate 
and table.date > date_helper.range_end*-1 + sysdate 

Затем я создаю группу на основе столбца date_description. Я пытаюсь заставить его отображать все группы, даже если нет записей, которые попадают в эту группу. Если записей нет, я хочу, чтобы оно имело значение 0, и все равно вывести группу.

Ответы [ 2 ]

2 голосов
/ 05 октября 2010

(+ 1 для полноты вашего вопроса. Добро пожаловать в SO!)

Если для группы нет записей, то, очевидно, Crystal не может сообщить об этом.Я рекомендую создать вспомогательную таблицу в вашем источнике данных.Вот что я хотел бы сделать, используя некоторую форму SQL:

  1. Создать таблицу «помощника».Он будет иметь 1 столбец и будет содержать все группы, которые вы хотите отобразить.Если имена групп являются динамическими, вы можете использовать запрос на выборку или запрос таблицы составления.

  2. Правое объединение из вспомогательной таблицы в таблицу данных.Отправьте объединенные данные в Crystal.

  3. В Crystal используйте столбец вспомогательной таблицы в своих группировках и расчетах возрастных групп.

Также в своемДля расчета необходимо добавить строку: Else "No age";

0 голосов
/ 05 октября 2010

Расширяя комментарий к ответу PowerUser, если вы используете версию Crystal, которая позволяет вам вводить собственный SQL (вместо необходимости использовать Crystal Database Database Expert), вы можете настроить подзапрос, который действует как помощник стол - что-то вроде:

select * from (
select 0 range_start, 11 range_end, '0-10 days' date_description from dual union
select 11, 21, '11-20 days' from dual union  
select 21, 31, '21-30 days' from dual union  
select 31, 99999, '31+ days' from dual) date_helper
left outer join 
(select sysdate-5 mydate from dual union all 
 select sysdate - 25 from dual) mytable
on mytable.mydate <= date_helper.range_start*-1 + sysdate 
and mytable.mydate > date_helper.range_end*-1 + sysdate 

(Синтаксис Oracle - точный синтаксис запроса зависит от используемого вами диалекта SQL.)

РЕДАКТИРОВАТЬ: изменен с SQLServer на Oracle синтаксис.

ДОПОЛНИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ: добавлены некоторые простые примеры данных.

...