我有这个查询:
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;
当用户在开始日期和结束日期之间选择日期时,执行此表:
CREAD DATE NOTIFICATION MTTR
123 1/1/2017 6 56
1000 30/1/2017 3 80
当用户在开始日期和结束日期之间没有选择任何日期时,请执行此表:
CREAD DATE NOTIFICATION MTTR
123 1/1/2017 6 0
1000 30/1/2017 3 0
在“ MTTR”列中的值为0。但是我希望上表中的值为相同。
如何在oracle sql中编写查询?
答案 0 :(得分:1)
当用户在开始日期和结束日期之间未选择任何日期时,则“ MTTR”列值为0。
当用户没有选择日期时,表达式(:endate - :stdate)
的第一部分的值为(null - null)
,因此表达式的其余部分的值为null
,因此您的查询返回{{1 }}默认为NVL()
。
但我希望上表中的值相同。
要获得此结果,您需要处理0
和start_date
的空值。也许这对您有用:
end_date
或者您可能需要其他默认设置。但是,由于nvl(:endate -:stdate, 1)
的值取决于MTTR
和start_date
的范围,因此很难看到当用户输入时如何获得“相同值” 没有界限。