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

时间:2009-09-23 10:12:53

标签: crystal-reports

我正在使用Crystal Reports 2008.我想创建一个报告,我将从一个SQL获取值,并且我必须传递另一个SQL的值字段并获得结果。 那可能吗?

2 个答案:

答案 0 :(得分:4)

首先,我推荐Jonathan Leffler的回答。如果您可以使用查询以您需要的方式格式化数据,而不是尝试使用放置在详细信息或组部分中的子报表,那就更好了。将子报表放在详细信息部分中就像为主报表提取的每条记录运行报表一样。

说到并回答您的问题,当您添加子报表时,您可以右键单击子报表并选择“更改子报表链接”。您可以在此处将主报表数据链接到子报表数据。

编辑以回应您的评论

1)您可以在此处使用两个选项。一种方法是在子报表中创建一个参数,在子报表的“选择专家”中添加逻辑,以便它使用新参数,然后使用“子报表链接”屏幕将主报表中的列链接到子报表中的参数。 / p>

2)在主报表和子报表中设置共享变量,然后可以在“选择专家”公式中使用该变量。有关此内容的详细信息,请参阅以下问题。 Retrieve record count of subreport in Crystal Reports

希望这会有所帮助。如果正确无误,请不要忘记对所有有帮助的答案进行投票,并为您的问题标记正确的答案。

答案 1 :(得分: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

根据您的DBMS,您也可以预先使用WITH子句:

WITH name1 AS ...query1...:
SELECT ...
  FROM ...list including name1...
 WHERE ...

值得花费一些精力来组合使您认为需要子报告的查询。如果您仍需要子报告,那么您需要的专家帮助比我提供的更多。