2013-04-16 5 views
1

У меня есть следующий SQL заявление:Oracle двойной подсчет случай

 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 

Проблема состоит в том случае, если результат расчета равна нулю, то он должен рассчитать сумму по-другому и проверить, если тот меньше чем 2, тогда считайте это как +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

Проблема заключается в том, что если функция возвращает нулевое значение она должна попробовать функцию, но с двумя новыми параметрами и он должен затем подсчитать их еще запустить дело еще Короче говоря, я не хочу получить нуль, но вместо этого избегаю нуля –

+0

@MarcRasmussen Посмотрите на редактирование - вам нужна вложенная 'CASE'. – dasblinkenlight

+0

два других случая, которые равны 0, не должны быть CALCULATE_CALLBACK_DURATION (CREATED, LAST_UPD)/60/60? –

Смежные вопросы