【问题标题】:How do I get two sums of two separate tables with no joint keys in a single crystal report?如何在单个水晶报表中获得两个没有联合键的单独表格的两个总和?
【发布时间】:2011-09-23 03:49:19
【问题描述】:

我有两个表格中的数据(示例见下文) - 如何创建仅显示 sum(table1.column1) 和 sum(table2.column1) 的 Crystal 报告(更多的是“记分卡”)没有其他细节?当我尝试时,其中一个总和变得太大,表明它已包含在计算的某个内部循环中。

表 1:
第 1 列:整数
第 2 列:Varchar(100)
...

表 2:
第 1 列:整数
第 2 列:Varchar(50)
...

注意 - 没有 个联合键,表之间的唯一关系是它们与同一个业务领域相关。

【问题讨论】:

  • 澄清 - 这些表是真正独立的 SQL 查询,如果可能的话,我宁愿保持这种方式,而不是在一个大查询中将它们修补在一起。
  • 这些结果表中是否有唯一 ID?

标签: sql database crystal-reports report


【解决方案1】:
  1. 为 Table1.uid 添加分组级别。创建一个运行总计 Table1Sum,在 Table1.Column1 上求和,在更改组 Table1.uid 时,从不重置。创建一个运行总计 Table2Sum,对 Table2.Column1 求和,在每条记录上,在组 Table1.uid 更改时重置。在报表页脚中打印两个运行总计。
  2. 将您的查询放在单独的子报表中。 (我可能会这样做。)

第一个显然需要 (1) Table1 中的唯一键和 (2) 在页脚中打印值。如果这些约束不起作用,两个子报表应该仍然有效。

【讨论】:

  • 谢谢,我想这已经接近了。
  • 您最终使用的是子报表还是有趣的运行总计?
  • 我做了大部分的实际计算和 sql 中的连接,并将所有想要的值作为列返回,然后制作子报表以深入每个 sql-“部分”(主要用于验证)。
【解决方案2】:
select t1.cnt, t2.cnt
from ( select count(*) cnt from table1 where... ) t1
, ( select count(*) cnt from table2 where... ) t2

【讨论】:

  • 那么 - 本质上,让它成为一个单一的查询?这是唯一的方法吗?
【解决方案3】:

如果你想避免子查询的方式,我能想到的唯一真正的途径就是使用子报表。

我能想到的两种方法:

  1. 将每个查询放在自己的子报告中,并将它们链接到您的主报告中。
  2. 将一个查询放在主报告中,将另一个放在链接的子报告中。

我回答这个问题时需要注意的是,它几乎肯定会比简单地使用一个查询(如 Randy 的回答)要慢,因为 Crystal Reports 的效率不如 DB 引擎。它也可能比维护更难。基本上,虽然您肯定可以这样做,但我不确定我

【讨论】:

    【解决方案4】:

    您可以使用两个 SQL 表达式字段。每个字段都需要返回一个标量值。您也可以将每个查询与主报告的查询关联(链接)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-29
      相关资源
      最近更新 更多