info 表中有a字段,其类型为VARCHAR2(),值为20.5,30.1等数据,业务逻辑要求合计该字段,同时要求150封顶,SQL如何写?
select case when sum(a) > 150 then '150' else sum(a) end as A from info 以上语句在else sum(a)处报“数据类型不一致”错误!

解决方案 »

  1.   

    select case when sum(a) > 150 then 150 else sum(a) end as A from info
      

  2.   

    '150' 与 else sum(a) 的结果类型不一致导致的错误
      

  3.   

    谢谢,结贴前再问一下,如果前面就写成'150封顶',那么后面的else sum(a)如何改?
      

  4.   

    问题在于sum函数中不能使用varchar2类型的字段
    select case when sum(to_number('20')) > 19 then 'yes' else 'no' end ship_no from dual;你的:
    select case when sum(to_number(a)) ) > 150 then '150' else sum(to_number(a)) )end as A from info
      

  5.   

    如果前面就写成'150封顶',那么后面的else sum(a)如何改?
    select case when sum(a) > 150 then '150封顶' else to_char(sum(a)) end as A from info