Crystal reports Crystal报告零值

Crystal reports Crystal报告零值,crystal-reports,null,zero,Crystal Reports,Null,Zero,嘿,伙计们, 所以我有一份报告,我把它分为不同的年龄段。如果没有与此年龄段关联的行,我希望年龄段的计数为零。所以我在数据库select中做了一个外部连接,效果很好。但是,我需要根据数据库中的另一列添加一个组 当我添加这个组时,没有与之关联的行的ageBucket将消失。我想这可能是因为我试图分组的列对于该行是空的,所以我在select中添加了一个行号,然后按它分组,我基本上只需要按每一行分组,我不能只把它放在细节中。。。如果有必要,我可以对此进行更多解释。但是添加行号后,没有数据的ageBuck

嘿,伙计们, 所以我有一份报告,我把它分为不同的年龄段。如果没有与此年龄段关联的行,我希望年龄段的计数为零。所以我在数据库select中做了一个外部连接,效果很好。但是,我需要根据数据库中的另一列添加一个组

当我添加这个组时,没有与之关联的行的ageBucket将消失。我想这可能是因为我试图分组的列对于该行是空的,所以我在select中添加了一个行号,然后按它分组,我基本上只需要按每一行分组,我不能只把它放在细节中。。。如果有必要,我可以对此进行更多解释。但是添加行号后,没有数据的ageBucket仍然为空!当我删除我添加的这个组时,我得到了所有年龄段的桶


有什么想法吗?谢谢

我很难理解你的问题

我知道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
这样你就可以在你想要的地方得到零


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

这是因为与年龄组的外部连接并不意味着与其他人的外部连接 组是-每个数据集只保证每个年龄组中有一个,而不是每个[其他组]每个年龄组中有一个

因此,例如,如果您的另一个组是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

假设事件日期需要分组到存储桶中。

在rach组中只包含一行的分组方案是不常见的。我想知道你为什么需要它——也许会有线索。另外,看看Crystal生成的sql是否有新组-看看是否有任何差异可以解释丢失的行。嘿,Mark,你回答了我所有的Crystal问题!除了交叉连接,还有其他解决方案吗?数据集非常大,交叉连接可能不可行。@ntsue,您好!请提供有关[其他组]的更多详细信息,如行数、派生等?我通常认为交叉连接的年龄范围-[其他组]集比它将连接到的数据集要小得多。进一步的细节可能会澄清替代方法(如Adam)或使用子报告是否更合适。另一个组是我的表的主键。我之所以根据表的主键事例编号进行分组,而不是简单地将其放在报告的详细信息中,是因为我使用事例编号连接到另一个表,而该表不是主键。因此,另一个表可能有列、案例编号和案例编号不唯一的事件。我基本上想抓住与该案例编号相关的最后一个事件,我通过按案例编号分组并从页脚显示我的信息(而不是详细信息)来完成这一点。您以前在年龄段方面曾帮助过我,这非常有帮助。您认为您可以发布您提到的交叉连接的示例查询吗?我将不胜感激。。谢谢你,马克!