Oracle双计数案例

时间:2013-04-16 14:04:43

标签: sql oracle count case

我有以下sql语句:

     COUNT(CASE 
          WHEN CALCULATE_CALLBACK_DURATION(CREATED, LAST_UPD) IS NULL THEN CALCULATE_CALLBACK_DURATION(AA.THIS_DATE_OPENING, LAST_UPD) /60 /60 < 2 THEN 1
          ELSE CALCULATE_CALLBACK_DURATION(CREATED, LAST_UPD) /60 /60 < 2 THEN 1 
     END) AS Calculatedsum

其中CALCULATE_CALLBACK_DURATION(CREATED, LAST_UPD)是一个返回总和(以秒为单位)的函数

但是我收到了错误

  

缺少关键字

我做错了什么?是否有可能以这种方式计算?

更新

我也尝试了以下内容:

 CASE WHEN CALCULATE_CALLBACK_DURATION(AA.THIS_DATE_OPENING, LAST_UPD) /60 /60 < 2
 THEN 1 END 
ELSIF CALCULATE_CALLBACK_DURATION(CREATED, LAST_UPD) /60 / 60 <2 THEN 1 END IF) AS Calculatedsum

问题是如果计算结果为null,那么它应该以另一种方式计算总和并检查是否小于2然后将其计为+1

1 个答案:

答案 0 :(得分:1)

你错过了另一个WHEN(连续两个THEN)。此

WHEN CALCULATE_CALLBACK_DURATION(CREATED, LAST_UPD) IS NULL -- MISSING VALUE
THEN CALCULATE_CALLBACK_DURATION(AA.THIS_DATE_OPENING, LAST_UPD) /60 /60 < 2 THEN 1
-- ^-- Wrong keyword

应该是

COUNT(CASE
  WHEN CALCULATE_CALLBACK_DURATION(CREATED, LAST_UPD) IS NULL THEN
    CASE
    WHEN (CALCULATE_CALLBACK_DURATION(AA.THIS_DATE_OPENING, LAST_UPD) /60 /60 < 2)
      OR (CALCULATE_CALLBACK_DURATION(CREATED, LAST_UPD) /60 /60 < 2) THEN 1
    ELSE 0 END
  ELSE 0
END) AS Calculatedsum