如何在Crystal Reports中链接子报表?

4

我正在使用Crystal Reports 2008。我想创建一个报告,在这个报告中,我将从一个SQL获取值,并将该值字段传递给另一个SQL并获取结果。这样做是否可能?

2个回答

4
首先,我建议参考Jonathan Leffler的答案。如果您可以使用查询格式化数据,那么使用子报表放置在详细信息或组节中会更好。将子报表放置在详细信息部分就像为主报表检索的每个记录运行一次报表。
有了这个前提并回答您的问题,当您添加一个子报表时,您可以右键单击子报表并选择“更改子报表链接”。在这里,您可以将主报表数据链接到子报表数据。
编辑响应您的评论:
1)您可以在子报表中创建一个参数,在Select Expert中添加逻辑,以便它使用新参数,然后使用子报表链接屏幕将主报表中的列链接到子报表中的参数。
2)在主报表和子报表中设置共享变量,然后在Select Expert公式中使用它。有关更多信息,请参见以下问题。 在Crystal Reports中检索子报表的记录数 希望这可以帮助您。如果有任何帮助的答案,请不要忘记点赞并标记正确答案。

实际上我想在where条件中包含这个值。例如,如果我传递这个值,我想将这个值分配给子报表中的参数?所以当我尝试添加时,我无法看到这个参数? - Shalma
实际上,我想使用从主报表传递的这个值,但我无法看到子报表的参数以链接它。你能帮我吗?我正在使用SQL的add命令。因此,如果我在add命令之外创建了一个参数,我可以在add命令中使用它吗?我尝试过了,但在add命令中使用失败了。 - Shalma
你需要确保参数的类型与你想要链接的字段相同。也许这就是为什么它对你不可见的原因。 - Dusty

1
通常情况下(但并非总是如此),您可以将这两个 SQL 语句合并为一个,从而避免使用子报表时的复杂性。
举一个简单的例子:
SELECT CustomerNum    -- Returns number 919
  FROM RecentOrder
 WHERE OrderNum = 23455;

SELECT FirstName, LastName, EmailAddress
  FROM Customer
 WHERE CustomerNum = 919

这些可以以多种可能的方式组合:

SELECT FirstName, LastName, EmailAddress
  FROM Customer
 WHERE CustomerNum = (SELECT CustomerNum
                        FROM RecentOrder
                       WHERE OrderNum = 23455
                     )

SELECT FirstName, LastName, EmailAddress
  FROM Customer AS C JOIN RecentOrder AS O
       ON C.CustomerNum = O.CustomerNum
 WHERE O.OrderNum = 23455

根据您的数据库管理系统,您可能也可以在前面使用WITH子句:
WITH name1 AS ...query1...:
SELECT ...
  FROM ...list including name1...
 WHERE ...

值得花费一些精力来组合那些让你认为需要子报表的查询。如果你仍然需要子报表,那么你需要比我能提供的更专业的帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接