在oracle中解码生成diff输出

时间:2013-12-06 16:06:44

标签: sql oracle

SQL> select decode(grouping(deptno),1,'TOTAL',0,deptno) example,sum(sal) 
     from emp
     group by rollup(deptno);

example                                    SUM(SAL)
---------------------------------------- ----------
10                                             8750    
20                                             10875    
30                                             9400    
TOTAL                                          29025

 SQL> select decode(grouping(deptno),0,deptno,1,'TOTAL'), sum(sal) 
      from emp 
      group by rollup(deptno);

ERROR:

  

ORA-01722:无效号码

情形3:

 select (case grouping(deptno) when 1 then 'all' when 0 then deptno end) example,sum(sal) from emp group by rollup(deptno)

错误:预期的字符数

我正在尝试上述内容,期望相同的输出,但它显示差异。

1 个答案:

答案 0 :(得分:0)

来自the DECODE manual;

  

Oracle会自动将返回值转换为与第一个结果相同的数据类型。

在第一个查询中,第一个结果是TOTAL,一个字符串类型,因此列类型是一个字符串,deptno可以毫无问题地转换为deptno

在第二个查询中,第一个结果是TOTAL,一个数字类型,因此coumn类型是数字。由于第二个结果ORA-01722: invalid number无法转换为数字类型,因此查询将失败并显示{{1}}。