您不能对字符值求和,并且CASE语句中所有返回的值都必须是相同的数据类型。
如果使用TO_CHAR()将SUM转换为字符,由于未正确分组,这仍然无法正常工作,请参见此SQL
Fiddle。
最简单的方法是返回0而不是
'INVALID'对整个case语句求和,然后将其更改为
'INVALID'0。这不太一样…不将数字存储在字符列中吗?
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 afrom class )
这是一个SQL Fiddle来演示。



