如果那么记录具有多个条件的选择

时间:2013-09-10 14:55:51

标签: mysql if-statement crystal-reports selection

使用Crystal Reports 2011引用视图

我的公式写成“公式字段”

@mySelection

IF {V_JOB.TASK} LIKE "*IN"
AND {V_JOB.CLOSED} = "Y" 
AND {V_JOB.DATE} >= {?FrDate} 
AND {V_JOB.DATE} <= {?ToDate} 
THEN {V_JOB.JOB} ELSE "FALSE"

我的记录选择以“记录选择公式”

写成
{V_JOB.LMO} = 'L' AND
{@mySelection}

此视图包含几个相关字段。要对视图进行记录选择,我希望显示所有等于.BOB字符串的记录,当.TASK中的字符串如“* IN”和字段.DATE =?myDateRange和字段.CLOSED ='Y'< / p>

所以我写了这个等式,但是只有当TASK,DATE,CLOSED为真时,显示的记录才是行JOB。但我有同一个JOB的多行,其中TASK,DATE,CLOSED是假的,我也想看。

因此,如果作业A有30条记录,并且其中只有1条记录的@mySelection为“true”,那么我想选择所有30条记录,即使其他29条记录为“假”。它的编写方式只显示1条真实记录而不显示其他29条记录。

任何人都可以就我做错的事情提供一些帮助吗?是否有“show all”命令或者我可以在数组中保存“true”JOB,然后引用该数组作为我的记录选择?

3 个答案:

答案 0 :(得分:0)

你在水晶里输入你的配方在哪里?这是非常重要的。

您应该能够通过在报告的详细信息部分中使用条件抑制来实现您的目标。像这样......

//Untested//
IF {V_JOB.TASK} LIKE "*IN"
AND {V_JOB.CLOSED} = "Y" 
AND {V_JOB.DATE} >= {?FrDate} 
AND {V_JOB.DATE} <= {?ToDate} 
THEN False ELSE True

这会抑制不符合上述条件的结果。

我发现你的问题有点不清楚,所以这个答案可能不适合你的需要,但希望这是正确方向的推动。

答案 1 :(得分:0)

我能够使用子报告来完成此操作,以使用主报告中的参数参考来记录选择

{V_JOB.LMO} = 'L' and
{V_JOB.JOB} = {?Pm-V_JOB_OPERATIONS.JOB}

然后我创建了一个主报告,并将参数链接到子报告中的Job.Job,并在主报告中为我的标准做了记录选择。

{V_JOB.TASK} LIKE "*IN"
{V_JOB.CLOSED} = "Y" 
{V_JOB.DATE} >= {?FrDate} 
{V_JOB.DATE} <= {?ToDate} 

然后我将子报告放在详细信息部分,但如果有多个Job.Job记录满足我的选择,则会产生重复记录问题。因此,为了解决这个问题,我为Job.Job创建了一个组,并将子报告放在组头中并抑制了细节。

我不确定这是最有效地使用CPU功率还是在CR中对此进行编程的最佳方法,但它为我提供了所需的正确结果,并且相对快速地提供了数据库的大小。

答案 2 :(得分:-1)

您的记录选择论坛应该是这样的。

{V_JOB.LMO} = 'L' AND
{V_JOB.JOB}

现在您拥有CR中的所有记录。

使用以下公式作为显示记录的字段的抑制选项。

@Supress

IF {V_JOB.TASK} LIKE "*IN"
AND {V_JOB.CLOSED} = "Y" 
AND {V_JOB.DATE} >= {?FrDate} 
AND {V_JOB.DATE} <= {?ToDate} 
THEN true ELSE false

如果您的条件为真,那么将显示所有记录,否则将禁止所有记录。

我建议你不要在记录选择公式中应用这些类型的条件。