0

我的 Crystal Report XI for VS2010 中有 3 个表格,场景如下:

用 POID 链接在一起的 3 个表。

  • 表格1
    • 数据:城市、日期、工厂名称、POID(例如 1001)
    • 每个 POID 有一个记录
  • 表 2
    • 数据:阴影名称(例如蓝色)、数量(例如 123)、POID(例如 1001)
    • 每个 POID 有一个或多个记录
  • 表3
    • 数据:样式编号(例如 123)、买方的采购订单编号(例如 123)、POID(例如 1001)
    • 每个 POID 有一个或多个记录

表 2 和表 3 是独立的,它们的 POID 仅依赖于表 1。当表 2 和表 3 中 POID 的记录数不同时,问题就开始了。

在将表3添加到报表之前,我将报表分组在表1 POID上,并将表2记录信息放在报表的Details部分。但是,现在我已经插入了表 3 记录,表 2 和表 3 记录不断重复。

例如:对于 POID = 1001,有 1 条表 1 记录、3 条表 2 记录和 2 条表 3 记录。因此,报告的结果是每条表 2 记录重复两次,每条表 3 记录重复三次。

我不希望他们重蹈覆辙。我希望它们像在数据库中一样显示。

我已经使用 POID 组使用了 C#、VS2010 和 SQLExpress2008 的所有表数据。

我希望这很清楚,您可以提供帮助。提前致谢。

注意:我为这个问题做了很多研究,最后,在这里问。

4

1 回答 1

3

首先,我认为您误解了对此类数据库的查询的外观。如果您将联接设置为以下内容,它实际上会准确地为您提供数据库查询在视图中返回的内容,SELECT * FROM TABLE1 CROSS JOIN TABLE2 ON TABLE1.POID = TABLE2.POID CROSS JOIN TABLE3 ON TABLE2.POID = TABLE3.POID这意味着:如果有一个 TABLE1 记录、三个 TABLE2 记录和两个 Table3 记录,您将选择 TABLE1记录 6 次,每个 TABLE2 记录 2 次,共 6 次,每个 TABLE3 记录 3 次,共 6 次。所以,真的,你返回了 6 行,但报告中的所有内容都是 FUBAR,因为你是如何布局的。对 TABLE1 记录进行分组可能是您所做的唯一“正确”的事情。

我认为在不创建其他数据库对象的情况下解决此问题的最简单方法是子报表。希望这是有道理的,如果你愿意,我可以拼凑一张图片,但你想做的是:

  1. 在您的主报表中,使用您的主数据库对象作为数据源,在 TABLE1 上进行分组,并在组页眉或页脚(您的选择)中添加两个附加部分,并完全隐藏详细信息部分。
  2. 在您添加到分组的第一个小节中,添加一个仅使用 TABLE2 作为数据源的子报表,不使用分组并将您的 TABLE2 信息放在详细信息部分。如果您认为有必要,将附加页眉和摘要信息添加到报表页眉和页脚。
  3. 在您添加到分组的第二个小节中,添加一个仅使用 TABLE3 作为数据源的子报表,不使用分组并将您的 TABLE3 信息放在详细信息部分。如果您认为有必要,将附加页眉和摘要信息添加到报表页眉和页脚。
  4. 将任何其他信息添加到所需的页脚。

本质上它应该看起来像:

  • 主报告 - 报告标题
  • 主报告 - 页眉
  • 主报告 - 第 1 组标题
    • 第 1 组标题 - A 部分 - 表 1 记录信息
    • 组 1 标题 - B 部分 - 子报表 1
      • 子报表 1 - 报表标题
      • 子报告 1 - 详细信息 - 表 2 记录信息
      • 子报表 1 - 报表页脚
    • 组 1 标题 - C 部分 - 子报表 2
      • 子报表 2 - 报表标题
      • 子报告 2 - 详细信息 - 表 3 记录信息
      • 子报表 2 - 报表页脚
  • 主报告 - 详细信息(已隐藏)
  • 主报告 - 第 1 组页脚
  • 主报告 - 报告页脚
  • 主报告 - 页脚

这将为每个 TABLE1 记录生成一个带有 TABLE1 标题的报告,然后是其 TABLE2 和 TABLE3 信息,而不会重复它们并使您发疯。

这是否有意义或有帮助?

于 2012-07-20T13:41:46.540 回答