2013-04-16 31 views
1

我有以下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)是返回總和(以秒爲單位)的函數

但是我得到的錯誤

缺少關鍵字

我在做什麼錯?甚至可以用這種方式來計算?

UPDATE

我也曾嘗試以下操作:

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,則它應該計算總和以另一種方式,並檢查是否這就是少然後將其計爲+1

回答

1

您錯過了另一個WHEN(您連續有兩個THEN s)。這

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 
+0

問題在於這樣一個事實:如果函數返回NULL,應該儘量的功能,但有兩個新的參數,那麼它應該盡數否則其他情況下運行 總之,我不想得到null,而是避免null –

+0

@MarcRasmussen看看編輯 - 你需要一個嵌套的'CASE'。 – dasblinkenlight

+0

兩個其他情況是0不應該是CALCULATE_CALLBACK_DURATION(CREATED,LAST_UPD)/ 60/60? –