当我添加这个组时,没有与之关联的行的agebuckets消失了。我认为这可能是因为我试图分组的列对于该行是空的,所以我在我的选择中添加了一个行号,然后按此分组(我基本上只需按每行分组,我可以不要把它放在细节中......如果有必要,我可以解释一下这个问题。但是在添加行号后,没有数据的agebuckets仍为null!当我删除这个我添加的组时,我会得到所有年龄段。
有什么想法吗?谢谢!
答案 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
这样你肯定会在你想要零的地方得到零。
我意识到这不是你问题的直接答案。祝你好运。