2013-01-19 32 views
1

我工作的一个数据库,它看起来像这样(在最简单的形式)上:SUMIFS水晶

{阶段} {代码} {}数量

例子:

{数量}的{阶段} = “R” 和{代码} = “纳特”= 0

{数量}的{阶段} = “F” 和{代码} = “纳特”= 5

{数量} for {Phase} =“R”and {Code} =“Int”= 10

{数量}的{阶段} =“F”和{代码} =“诠释” = 15

我试图得到一个结果,以显示我的数量为相“R”和代码“纳特” (其中R是<> 0),否则给我阶段“F”的数量。所以对于上面的例子,我会得到Nat的答案= 5(因为阶段R的数量为0)并且答案为10,其中代码是Int(因为阶段R的数量为<> 0)

我已经使用3个公式字段做到这一点:

1:如果({PHASE} = “F” 和{CODE} = “NAT”),则{QTY}否则0

2:如果({PHASE} =” R”和{代码} = “NAT”),则{QTY}否则0

3:如果{2} = 0,那么{1}否则{2}

公式字段1 & 2拿出正确的金额。然而公式字段{3}返回两个阶段。例如代码“Int”Phase“R”显示为qty = 25而不是qty = 10.

如何解决此问题?

回答

0
  1. 你需要组由{table.code},因为这不是一列计算,但需要将超过为2+相位(意思2+行数据)的每个码的计算。

  2. 创建一个带有两个变量的公式,这两个变量将存储每个阶段的值F和R.此公式需要进入报表的“详细信息”部分。

    whileprintingrecords; 
    numbervar Fqty; 
    numbervar Rqty; 
    
    if {table.phase}="F" then Fqty:={table.qty} 
    else Rqty:={table.qty};
  3. 现在,在组页脚中,您可以通过变量引用两个数量值。

    whileprintingrecords; 
    numbervar Fqty; 
    numbervar Rqty; 
    
    if Fqty=0 then Rqty else Fqty

大功告成。不要忘记重置组头中的两个变量,以免在不同代码之间传递数量。