Crystal сообщает нулевые значения

Привет, ребята, у меня есть этот отчет, который я группирую по разным возрастным сегментам. Я хочу, чтобы счетчик возрастного сегмента был равен нулю, если нет строк, связанных с этим возрастным сегментом. Итак, я сделал внешнее соединение в моей базе данных, и это отлично работает. Однако мне нужно добавить группу на основе другого столбца в моей базе данных.

Когда я добавляю эту группу, возрастные корзины, с которыми не связаны строки, исчезают. Я подумал, что это могло быть из-за того, что столбец, по которому я пытался сгруппировать, был нулевым для этой строки, поэтому я добавил номер строки к моему выбору, а затем сгруппировал его (в основном мне просто нужно сгруппировать по каждой строке, и я могу не просто вдаваться в подробности ... Я могу объяснить это подробнее, если необходимо). Но после добавления номера строки возрастные корзины, в которых нет данных, по-прежнему равны нулю! Когда я удаляю эту группу, которую я добавил, я получаю все сегменты возраста.

Есть идеи? Спасибо!!


person ntsue    schedule 22.10.2010    source источник
comment
Схема группировки, включающая только одну строку в группу rach, необычна. Интересно, зачем вам это нужно - может быть, будет зацепка. Кроме того, посмотрите на sql, сгенерированный Crystal с новой группой и без нее - посмотрите, есть ли какая-либо разница, которая может объяснить отсутствующие строки.   -  person Ray    schedule 23.10.2010


Ответы (2)


Это связано с тем, что внешнее соединение с возрастной группой не является также внешним соединением с любой другой вашей группой — вам гарантировано только по одной каждой возрастной группе на набор данных, а не по одной каждой возрастной группе на [другую группу].

Так что, если, например, другой вашей группой является регион, вам нужно декартово/перекрестное соединение таблицы возрастных диапазонов с таблицей регионов (чтобы получить все возможные комбинации возрастного диапазона и региона) перед внешним соединением с остальными группами. ваш набор данных.

РЕДАКТИРОВАТЬ - на основе комментариев должен работать запрос, подобный следующему:

select date_helper.date_description, c.case_number, e.event_number
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
cross join case_table c
left outer join event_table e
on e.event_date <= date_helper.range_start*-1 + sysdate 
and e.event_date > date_helper.range_end*-1 + sysdate
and c.case_number = e.case_number

(при условии, что это event_date, которое необходимо сгруппировать в сегменты.)

person Community    schedule 25.10.2010
comment
Эй, Марк, ты отвечаешь на все мои хрустальные вопросы! Есть ли какое-либо другое решение, кроме перекрестного соединения? Набор данных довольно большой, и перекрестное соединение может оказаться невозможным. - person ntsue; 25.10.2010
comment
@ntsue, привет! Пожалуйста, не могли бы вы включить более подробную информацию о [другой группе], например, количество строк, вывод и т. д.? Обычно я ожидаю, что перекрестно объединенный возрастной диапазон [другая группа] будет значительно меньше, чем набор данных, к которому он будет присоединен. Дальнейшие подробности могут прояснить, являются ли более подходящими альтернативные подходы (например, подход Адама или использование подотчетов). - person ; 25.10.2010
comment
Привет. Другая группа является первичным ключом для моей таблицы. Причина, по которой я группирую по первичному ключу (номеру дела) таблицы, а не просто добавляю его в детали своего отчета, заключается в том, что я использую номер дела для присоединения к другой таблице (где это не первичный ключ). . Таким образом, в другой таблице могут быть столбцы, номер дела и событие, где номер дела не уникален. Я в основном хочу захватить последнее событие, связанное с этим номером дела, и я достиг этого, сгруппировав по номеру дела и отобразив мою информацию из нижнего колонтитула, а не детали. - person ntsue; 25.10.2010
comment
вы уже помогали мне с сегментами возраста ( stackoverflow.com/questions/3858383/ ), и это было очень полезно. Как вы думаете, вы могли бы опубликовать пример запроса перекрестного соединения, о котором вы упомянули? Я был бы очень признателен за это .. спасибо Марк! - person ntsue; 25.10.2010

У меня возникли проблемы с пониманием вашего вопроса.

Я знаю, что поддержка NULL в Crystal Reports отсутствует в некоторых довольно фундаментальных аспектах. Поэтому я обычно стараюсь не зависеть от него.

Одним из способов решения этой проблемы является жесткое указание возрастных диапазонов в запросе к базе данных, например:

  SELECT p.person_type
         , SUM(CASE WHEN 
               p.age <= 2 
               THEN 1 ELSE 0 END) AS "0-2"
         , SUM(CASE WHEN 
               p.age BETWEEN 2 AND 18 
               THEN 1 ELSE 0 END) AS "3-17"
         , SUM(CASE WHEN 
               p.age >= 18 
               THEN 1 ELSE 0 END) AS "18_and_over"
    FROM person p
GROUP BY p.person_type

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

Я понимаю, что это не прямой ответ на ваш вопрос. Удачи.

person mechanical_meat    schedule 22.10.2010