Crystal报告零值

时间:2010-10-22 21:28:08

标签: crystal-reports null zero

嘿伙计们, 所以我有这份报告说我正在分组到不同的年龄段。如果没有与此年龄段关联的行,我希望年龄桶的计数为零。所以我在我的数据库选择中做了一个外连接,并且工作正常。但是,我需要根据数据库中的另一列添加一个组。

当我添加这个组时,没有与之关联的行的agebuckets消失了。我认为这可能是因为我试图分组的列对于该行是空的,所以我在我的选择中添加了一个行号,然后按此分组(我基本上只需按每行分组,我可以不要把它放在细节中......如果有必要,我可以解释一下这个问题。但是在添加行号后,没有数据的agebuckets仍为null!当我删除这个我添加的组时,我会得到所有年龄段。

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:2)

这是因为年龄组的外部联接也不是其他任何人的外部联接 group is - 您只保证每个数据集中的每个年龄组都有一个,而不是每个[其他组]的每个年龄组中的一个。

因此,例如,如果您的其他组是Region,则需要从您的年龄范围表到Region表的笛卡尔/十字交叉连接(以便您获得年龄范围和区域的所有可能组合),然后在外部加入之前数据集的其余部分。

编辑 - 根据评论,以下查询应该有效:

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 :(得分:1)

我无法理解你的问题。

我知道Crystal Reports的NULL支持缺乏一些非常基本的方式。所以我通常尽量不依赖它。

解决此问题的一种方法是在数据库查询中对年龄范围进行硬编码,例如:

  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

这样你肯定会在你想要零的地方得到零。

我意识到这不是你问题的直接答案。祝你好运。