Crystal сообщает нулевые значения - PullRequest
1 голос
/ 23 октября 2010

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

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

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

Ответы [ 2 ]

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

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

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

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

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, который нужно сгруппировать в сегменты).

1 голос
/ 23 октября 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

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

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

...