初始数据:有一段查询,为了推理可以简化到下一个
SELECT MAX((CASE
WHEN to_char(sysdate, 'DY') = 'SAT' THEN 1
WHEN to_char(sysdate, 'DY') = 'SUN' THEN 1
ELSE 0 END)) status
FROM mytable WHERE mycondition;
问题:看来,如果mycondition在条件不能正常工作时导致结果集为空,则返回null而不是1.如果我只是替换最后一行查询下一个
FROM dual;
当条件完美无缺时,前两个。
条件:它应该只是一个查询,没有ifs,var defs等。
如何执行此类型的select但没有返回null值?
P.S。:可以使用NVL / NVL2,但这确实让事情变得复杂。
提前致谢。
答案 0 :(得分:0)
使用NVL功能:
SELECT NVL(MAX((CASE
WHEN to_char(sysdate, 'DY') = 'SAT' THEN 1
WHEN to_char(sysdate, 'DY') = 'SUN' THEN 1
ELSE 0 END)), 1) status
FROM mytable WHERE mycondition;
答案 1 :(得分:0)
案例当工作正常时,你的问题在于MAX。
当没有行匹配时,MAX和MIN返回null,而SUM和COUNT返回0。
我担心den-javamaniac是对的,你需要NVL,或者如果你不能切换MAX,可能会巧妙地使用DECODE。