多重条件计数

时间:2015-02-12 16:37:51

标签: sql if-statement where business-objects rich-client-platform

我有一个数据库中的引用列表。如果参考在一个月内存在,那么它被评定为1或99.如果参考不存在,那么它的评级为0.每3个月形成一个季度。在富客户端中,我可以创建以下交叉表:

    | Q1    Q1    Q1  |  Q2    Q2    Q2
Ref | M1    M2    M3  |  M4    M5    M6
----|-----------------|-----------------
  a | 99    99    99  |  99    01    99
  b | 00    01    99  |  99    01    00
  c | 99    00    00  |  00    00    00
  d | 99    01    01  |  01    01    99
  e | 00    00    01  |  01    99    01
  f | 01    01    01  |  99    99    99
  g | 01    01    01  |  00    00    00
  h | 99    01    00  |  00    00    00
  i | 00    00    01  |  01    99    01
  j | 00    00    00  |  00    01    99
  k | 00    00    00  |  01    01    01

我想要做的是每个季度,计算该季度某个时间点存在的总参考数量,并计算结束的任何参考值,其评级为99.现在通过结束我的意思是在本季度给出的最后一次评级。

E.g。第一季度的参考a存在,也将计入99.第一季度的参考值也存在,其最终评级将被视为1.参考资料j在第一季度根本不计算。

完整的结果将是:

Ref | Last Q1 | Last Q2
----|---------|---------
  a |   99    |    99
  b |   99    |    01
  c |   99    |    00
  d |   01    |    99
  e |   01    |    01
  f |   01    |    99
  g |   01    |    00
  h |   01    |    00
  i |   01    |    01
  j |   00    |    99
  k |   00    |    01

这给了我最后的计数:

Q          | Q1 | Q2
-----------|----|---
99 Count   | 3  | 4
Full Count | 9  | 8

哪些业务对象代码可以直接跳转到计数表?

我认为关键是要获得一些代码来计算每个客户每季度的“最终评级”,但是我没有运气这样做。我还没有找到在一个公式中使用多个'where'子句的方法。

1 个答案:

答案 0 :(得分:1)

您需要使用多个变量来完成此任务。

假设你开始使用名为的对象:

      | [Qtr]
      | [Mth]
  ----|------------
[Ref] | [Val]

1)创建一个变量,以保持每季度的最大月份具有非零值:
    MaxM = Max([Mth]) In ([Ref];[Qtr]) Where ([Val] <>"00")

将其放入交叉表的正文中以验证结果:

    Q1  Q2
a   M3  M6
b   M3  M5
c   M1  
d   M3  M6
e   M3  M6
f   M3  M6
g   M3  
h   M2  
i   M3  M6
j       M6
k       M6

2)创建另一个变量来计算月份等于季度中最后一个月的99个数字,其值为:
LastIs99Cnt = If (Max([Val]) Where ( [Mth] = [MaxM])) = "99" Then 1 Else 0

使用此变量替换交叉表中的[MaxM],以便我们验证:

    Q1  Q2
a   1   1
b   1   0
c   1   0
d   0   1
e   0   0
f   0   1
g   0   0
h   0   0
i   0   0
j   0   1
k   0   0

3)从报告正文中删除[Ref]并将[LastIs99Cnt]聚合为:
=Sum([LastIs99Cnt] ForEach ([Ref])) 同时添加一个简单的Count / Where来获取非99值:
=Count([Ref] Where ([Val] <> "00"))

该块将如下所示:

         | [Qtr]
         |---------------------------
99 Cnt   | =Sum([LastIs99Cnt] ForEach (Ref))
Full Cnt | =Count(Ref] Where (Val] <> "00"))

并产生预期的结果:

         Q1   Q2
99 Cnt    3    4
Full Cnt  9    8