2016-04-15 63 views
0

我目前正在创建Crystal Reports中有两个表的简单报告:动态参数显示的值太多

{Table1.group_name_id} --> {Table2.technical_group_id} 

Table 1 holds all of the groups; ID's, Names etc 
Table 2 holds only the technical groups ID 

有了这两个表的链接就意味着将返回唯一的记录是那些技术集团参与,完美!但是现在我想添加一个动态参数来返回最终用户选择的技术组名称。

由于{Table2}只保存一个字段(ID)链接到{Table1}的ID,我必须在{Table1}的名称字段上执行参数选择。

但是,这是拉回所有{Table1}的名字,即使在强制连接存在的情况下也在{Table2}上折扣加入。

有没有办法迫使它只能拉回{Table1}的名字,只要它匹配{Table1} and {Table2}之间的JOIN?

在此先感谢!

编辑(附加信息)

Table Link

+0

哪个连接有你用过? – Siva

+0

这是一个INNER JOIN - 它应该只返回出现在这两个表中的组,但由于某种原因从{Table1}返回所有组。 – OmisNomis

+0

内部连接不应该以这种方式工作...检查数据,如果您获得完整的数据,那么它意味着所有记录匹配 – Siva

回答

2

正如我想的那样 - 问题是Crystal Reports在显示参数值时无法识别JOIN。

经过一番阅读后,我发现JOINS只有在查询传递到数据库(逻辑上)时才被识别。所以当选择一个参数时,它不能识别连接。

我通过创建一个自定义SQL命令来解决这个问题,强制它只回退第二个表中的组。

0

首先,请确认您的加入INNER JOIN。

enter image description here

对于加法, 您可以通过用户输入的参数的水晶报表和使用{} @Parameter来过滤水晶报表使用SelectionFormula结果集。

或者你甚至可以从应用程序中设置selectionformula本身。

+0

这就是我现在不得不求助的,但我正在寻找一个动态参数而不是静态参数。 – OmisNomis

+0

一旦您在Crystal Report中创建了一个参数变量,您就可以将运行时间值/动态值传递给您的应用程序中的crystal参数。如果在SelectionFormula中使用过滤器(tablefieldname = @parametername),那么它在Sql中充当WHERE子句。 –

+0

对不起,只是为了确保我很清楚....这就是我所做的: 1.如上所述在两个表格之间创建JOIN 2。在{{table1} .group_name'上创建一个动态参数。 3.在'{table1} .group_name' = {?Parameter} 上创建一个Selection Expert公式。但是这仍然显示来自'{table1}'的所有客户名称'而不仅是与{{table2}' – OmisNomis