我有这个问题:
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 回答
当用户选择没有日期时,表达式
(:endate - :stdate)
的第一部分求值为(null - null)
,因此表达式的其余部分求值为null
,因此查询返回NVL()
的默认值0
.要获得此结果,您需要处理
start_date
和end_date
的空值 . 也许这对你有用:或者你可能想要一些其他默认值 . 但由于
MTTR
的值取决于start_date
和end_date
的范围,因此很难看到当用户输入无边界时如何获得"the same value" .