当有记录时,以下Oracle查询应该返回字段num
的行。如果没有找到记录,我希望它返回N/A
作为显示值,返回0作为返回值字段。
select num display_value, num return_value from cells
WHERE ss = 4
UNION ALL SELECT "N/A" display_value, 0 return_value from dual
WHERE NOT EXISTS (SELECT 1 FROM CELLS WHERE ss = 4)
当找不到记录时,这不起作用,因为num
是NUMBER
的类型和" N / A"不是NUMBER
。问题是如何修改查询才能工作?也许有更好的方法来做到这一点?
答案 0 :(得分:1)
CAST
或TO_CHAR
?
select to_char(num) numdisplay_value, num return_value from cells WHERE ss = 4 UNION ALL SELECT 'N/A' display_value, 0 return_value from dual WHERE NOT EXISTS (SELECT 1 FROM CELLS WHERE ss = 4)
也许(看看你的执行计划),你可以通过使用CTE获得更好的结果。
至少,第二种解决方案更具可读性(根据我的口味),并且根据不重复自己原则可能更易于维护,因为您必须编写{{1只有一次子句:
where