按组和子组汇总

时间:2011-11-02 20:58:26

标签: crystal-reports crystal-reports-2008

我有一份水晶报告,它有一个基于两个字段的分组声明

  1. COMPANYNAME
  2. 帐户类型
  3. 现在Crystal报告工作,它按“公司名称”进行分组,但不按“帐户类型”分组。我有两种类型的帐户,“常规和高级”。一家公司与我们有两种类型的帐户,它可以定期而非溢价。您认为这是什么问题。

    我是水晶报道的新手。我熟悉SQL虽然。我看到的差异是

    • 没有用于任何列的聚合函数 - 在SQL中,需要聚合字段才能获得有意义的结果
    • 报告中大约有10个字段,但group by仅用于两个字段 - 在SQL中,如果有两个以上的字段,则必须按所有字段分组
    • 按字段分组在中间和结尾 - 再次在SQL中,groupby字段的顺序很重要

    在这种情况下,我首先按公司名称分组,然后按帐户状态分组。任何见解都会有所帮助。

    请注意,我从Crystal Report生成了等效的SQL语句。那个查询没问题,除了没有group by语句。我自己添加了这些和聚合列,并且我得到的结果与我在Crystal中得到的结果相同(但是SQL报告更准确,因为它在两个字段中组合而不仅仅是一个)。

    编辑:示例日期。每个公司可以拥有相同类型的多个帐户。我希望聚合“公司名称”和“帐户类型”,以便数据列出如下。

    +----+--------------+-------------+------+
    | ID | Company Name | AccountType | Sale |
    +----+--------------+-------------+------+
    | 1  | ABC          | I           | 500  |
    | 2  | ABC          | I           | 600  |
    | 3  | ABC          | O           | 1000 |
    | 4  | ABC          | O           | 2000 |
    | 5  | ABC          | O           | 3000 |
    | 6  | XYZ          | O           | 2500 |
    | 7  | LMN          | O           | 3400 |
    +----+--------------+-------------+------+
    

    我想从上表中输出

    +--------------+-------------+------+
    | Company Name | AccountType | Sale |
    +--------------+-------------+------+
    | ABC          | I           | 1100 |
    | ABC          | O           | 6000 |
    | XYZ          | O           | 2500 |
    | LMN          | O           | 3400 |
    +--------------+-------------+------+
    

1 个答案:

答案 0 :(得分:4)

更新以纳入评论讨论和修订问题:

解决此问题有两个基本选项:

1)修改SQL以执行所需的聚合。

2)在Crystal中,添加两个组,一个用于公司,另一个用于帐户类型。

在Crystal中添加组之前,您有几个标准部分,包括报表头,页眉,详细信息,报表页脚和页脚。

如果不执行分组,数据库中读取的每一行都将显示在详细信息部分中(从技术上讲,每行重复整个详细信息部分)。

当您添加第一个组(公司)时,Crystal会在“详细信息”部分之前添加“组头”#1,在“详细信息”部分之后添加“组头”#1。

如果此时运行报告,对于每个公司,Crystal将在与该公司关联的每组详细记录之前显示组标题,然后将显示该公司的所有详细记录,最后,将显示该公司的组页脚。

通常,组头用于显示不需要为每个详细记录重复的分组的公共信息。在此示例中,我们可以显示公司名称以及与公司相关的其他信息。

同样,组页脚通常用于显示该组中显示的所有详细记录的摘要信息。

在这种情况下,我们可以添加一个总结销售额的汇总,该汇总金额将是该公司的总销售额,无论帐户类型如何。

添加第二组后,它将对原始组执行子分组。

当添加第二个组时,Crystal会在Group Header#1下方和详细信息上方放置一个Group Header#2,并将组页脚#2直接放在详细信息下方和Group Footer#1上方。

此时,您的报告格式类似于以下内容:

Group Header #1 (Company)
  Group Header #2 (Account Type)
    Details (the individual sale records)
  Group Footer #2
Group Header #1

在这种情况下,对于每个公司,我们希望按帐户类型对详细信息记录进行分组。因此,如果需要,我们可以向Group Header#2添加描述帐户类型的信息,我们可以将聚合添加到Group Footer#2,以显示公司内每种帐户类型的总计。

现在,如果只需要显示每个公司中每个帐户类型的总计,那么我们需要在报告中显示的唯一部分是Group Footer#2。此页脚中提供了所有字段(公司,帐户类型,销售总计),因此我们不需要任何其他区域。