1

当我尝试执行下面的查询时,出现错误:

ORA-00932不一致的数据类型预期 char 得到数字

select (case when upper (TEXT) <> lower (TEXT) then 'INVALID'
             else sum(TEXT)
        end) 
  from CLASS 
 where SECTION = 'SEVENTH' 

当我在 ELSE 条件中删除 SUM 时查询工作正常> 但我需要对文本求和以达到预期结果。

4

2 回答 2

2

您不能对字符值求和,并且 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 a
           from class )

这是一个要演示的SQL Fiddle 。

于 2013-06-09T23:34:37.490 回答
0

好吧,你不能SUM发短信,对吧?这就是为什么当您从CASE. 您是否尝试过使用to_number要求和的值?

于 2013-06-09T23:15:15.827 回答