当我尝试执行下面的查询时,我收到错误:
ORA-00932不一致的数据类型预期char得到数字
select (case when upper (TEXT) <> lower (TEXT) then 'INVALID'
else sum(TEXT)
end)
from CLASS
where SECTION = 'SEVENTH'
当我在ELSE条件中删除SUM时查询工作正常&gt;但我需要SUM文本以达到预期的结果。
答案 0 :(得分:2)
您无法在CASE语句must be the same datatype中对字符值和所有返回值求和。
如果您使用TO_CHAR()将SUM转换为字符,那么由于您未正确分组,这仍然无法正常工作,请参阅此SQL Fiddle。
最简单的方法是返回0而不是'INVALID'
,对整个case语句求和,如果它为0,则将其更改回'INVALID'
。&#39 ;不完全一样......不要在字符列中存储数字?
select case when a = 0 then 'INVALID'
else to_char(a)
end
from ( select sum( case when upper(txt) <> lower(txt) then 0
else to_number(txt)
end ) as a
from class )
这里有SQL Fiddle来演示。
答案 1 :(得分:0)
嗯,你不能SUM
发短信,对吗?这就是当你从CASE
中删除操作时它运行良好的原因。您是否尝试对要求求和的值使用to_number
?