先看以下两个语句:
select  decode(grouping(subsidiaryid),1,'all_amount',subsidiaryid)
,serviceproviderid,sum(amount) 
from settlement where billingcycleid=44 
group by rollup(serviceproviderid,subsidiaryid)select  decode(grouping(subsidiaryid),0,subsidiaryid,'all_amount')
,serviceproviderid,sum(amount) 
from settlement where billingcycleid=44 
group by rollup(serviceproviderid,subsidiaryid)现在疑问是,为什么第一句是执行成功的,而第二句是错误的,到底是什么原因???

解决方案 »

  1.   

    没错误信息不好分析,能想到的可能性只有subsidiaryid是数字型的,放在'all_amount'的前面则DB将这个算试的结果看作数字,而在'all_amount'不能转成数字,出现错误。第一句在'all_amount'在前就不会有这个问题。
      

  2.   

    谢谢楼上几位好心人的答复。
    首先提示的错误是“ORA_01722:无效数字”。
    对于4楼提到的错误,不存在,因为改了用以下的方法:
    select     decode(grouping(subsidiaryid),1,'all_amount',0,subsidiaryid) 
    ,serviceproviderid,sum(amount)   
    from   settlement   where   billingcycleid=44   
    group   by   rollup(serviceproviderid,subsidiaryid) select     decode(grouping(subsidiaryid),0,subsidiaryid,1,'all_amount') 
    ,serviceproviderid,sum(amount)   
    from   settlement   where   billingcycleid=44   
    group   by   rollup(serviceproviderid,subsidiaryid) 
    照样,第一个成功,第二个失败。
      

  3.   

    4楼的,好像我把all_amount改成数字就可以了,能不能再解释一下你的说法?
      

  4.   

    我明白了,是因为decode的第一个返回参数决定了后面返回参数类型。
    谢谢楼上几位。