2011-11-02 135 views
0

我有一个水晶报表,它基于两个领域汇总的组和子组

  1. 公司名称
  2. 通过声明一组
  3. 帐户类型

现在Crystal报表的工作,它确实组按“公司名称”,但不按“帐户类型”分组。我有两种类型的帐户,“常规和高级”。一家公司既有我们的帐户类型,也有常规性而非高级性。你认为是什么问题。

我是新来的水晶报告。我熟悉SQL虽然。我看到的是

  • 没有用于任何列中没有聚合函数的差异 - 在SQL聚集场需要得到有意义的结果
  • 有报告10场,但GROUP BY仅用于在两个领域 - 在SQL,你必须通过所有领域的群体,如果有两个以上领域
  • 田野集团在中间和结束 - 再次在SQL GROUPBY字段的顺序是非常重要

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

请注意,我从Crystal Report生成了等效的SQL语句。除了不存在group by语句之外,该查询是可以的。我自己添加了这些和聚合列,并且获得与我在Crystal中获得的结果相同的结果(但SQL报告更准确,因为它通过两个字段而不仅仅一个进行分组)。

编辑:示例日期。每家公司可以有多个相同类型的账户。我想汇总“公司名称”和“AccountType”,以便数据列在下面。

+----+--------------+-------------+------+ 
| 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 | 
+----+--------------+-------------+------+ 

输出I从上表中要的是

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

回答

3

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

有解决这个问题的两种基本的选择:

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

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

在晶体中添加组之前,您有几个标准节,包括报表标题,页眉,详细信息,报表页脚和页脚。

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

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

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

通常情况下,组标题用于显示该分组的公用信息,不需要为每个明细记录重复该信息。在这个例子中,我们可以显示与公司相关的公司名称和其他信息。

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

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

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

当添加第二组时,Crystal会在组标题#1下方放置组标题#2,并在详情上方放置组标题#2,并将组标题#2直接放置在细节下方和组页脚#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以显示公司内每个帐户类型的总计。

现在,如果希望显示每个公司内每个帐户类型的总计,那么我们需要在报告中显示的唯一部分是组页脚2。所有这些字段(公司,账户类型,销售总额)均可在此页脚中找到,因此我们不需要任何其他区域。

+0

是的,一家公司可以同时拥有两种类型的帐户,尽管这种情况很罕见。如果我按“账户类型”进行分组,则报告将完全不同。 –

+0

对不起,我可能一直不清楚这一点:离开公司分组,但删除AccountType分组。如果公司有多个帐户类型,并且希望它们在报告中以一致的顺序显示,则可以按公司内的帐户类型进行订购,但这可能不是必需的。 –

+0

我已编辑该问题。我无法正确格式化ASCII表格。如果您点击编辑按钮,您将正确到达表格。我提供了原始(模型)和所需的输出。注意我可以在SQL中完成,但我不熟悉Crystla中的工作方式。谢谢。 –