Как избежать нулевого значения в столбце после минус 2 даты в SQL? - PullRequest
0 голосов
/ 09 декабря 2018

У меня есть этот запрос:

SELECT CREAD, DATE, NOTIFICATION,
NVL (ROUND ((((:endate - :stdate) * 24) - CASE 
WHEN MAX(CREAD) = MIN(CREAD) THEN MAX(CREAD)
ELSE MAX(CREAD) - MIN(CREAD)
END) / COUNT(NOTIFICATION),2),0) "MTTR"
FROM DUAL;

Когда пользователь выбирает даты между start_date и end_date, затем выполняет эту таблицу:

 CREAD     DATE       NOTIFICATION     MTTR
  123      1/1/2017        6            56
  1000     30/1/2017       3            80

Когда пользователь не выбирает даты между start_date и end_date, затем выполняетэта таблица:

  CREAD     DATE       NOTIFICATION     MTTR
  123      1/1/2017        6             0
  1000     30/1/2017       3             0

IN Значение столбца "MTTR" равно 0. Но я хочу такое же значение в приведенной выше таблице.

Как написать запрос в oracle sql?

1 Ответ

0 голосов
/ 09 декабря 2018

Когда пользователь не выбирает даты между start_date и end_date, тогда ... Значение столбца «MTTR» равно 0.

Когда пользователь не выбирает дату, первая часть выражения (:endate - :stdate) оценивается как (null - null), следовательно, остальная часть выражения оценивается как null, и поэтому ваш запрос возвращает NVL() значение по умолчанию 0.

, но я хочу такое же значение в приведенном вышетаблица.

Чтобы получить такой результат, вам нужно обработать нулевые значения для start_date и end_date.Может быть, это будет работать для вас:

nvl(:endate -:stdate, 1)

Или вы можете захотеть другой вариант по умолчанию.Но так как значение MTTR зависит от диапазона start_date и end_date, трудно понять, как можно получить «то же значение» , когда пользователь не вводит границ.

...