Crystal报告if语句是否尝试在同一字段中包含和排除

时间:2014-02-04 15:35:07

标签: if-statement crystal-reports subreport

在子报告中,如果if语句中的两个条件都存在,我会尝试向主报告返回“是”或“真”。问题是报告评估每一行,我希望它在一行中查找所有行中的两个条件。

我尝试了什么:

shared stringvar PRODCAT:= if ({OEORDLIN_SQL.prod_cat} in ["TRD","TSI"])
and 
not({OEORDLIN_SQL.prod_cat} in ["TRD","TSI"]) then "Yes" else "No" 

我为条件A和B添加了公式,并在公式中使用它们,但我得到了相同的结果。它只会评估每一行:

WhilePrintingRecords;
shared stringvar PRODCAT:= if {@a} = "Yes" and {@b} = "Yes" then "Yes" else "No"

2 个答案:

答案 0 :(得分:0)

创建两个sql expression字段:

// {%TRD}
(
  SELECT COUNT(1)
  FROM   OEORDLIN_SQL a
  WHERE  order_id = order.order_id
  AND    prod_cat='TRD'
  GROUP BY order_id
)

// {%TSI}
(
  SELECT COUNT(1)
  FROM   OEORDLIN_SQL b
  WHERE  order_id = order.order_id
  AND    prod_cat='TSI'
  GROUP BY order_id
)

根据需要使用:

// {@do something}
If {%TSD}>0 AND {%TSI>0 Then
  ...
Else
 ...

答案 1 :(得分:0)

抱歉,没有意识到您的问题是插入摘要字段。

创建两个数字函数isInPRODCAT和isNotInPRODCAT。将它们插入报告的详细信息部分。

isInPRODCAT:= if ({OEORDLIN_SQL.prod_cat} in ["TRD","TSI"]) then 1 else 0
isNotInPRODCAT:= if not({OEORDLIN_SQL.prod_cat} in ["TRD","TSI"]) then 1 else 0 

然后在子报表的报表页脚部分中插入两个摘要字段。将它们设为两个函数的max()

创建2个共享变量:

    shared numbervar max_isInPRODCAT:= {max_isInPRODCAT}        
    shared numbervar max_isNotInPRODCAT:= {max_isNotInPRODCAT}

然后在主报告中,检查max_isInPRODCAT = 1和max_isNotInPRODCAT = 1

HTH