Sql oracle中的解码生成差异输出

Sql oracle中的解码生成差异输出,sql,oracle,Sql,Oracle,错误: ORA-01722:无效号码 案例3: SQL> select decode(grouping(deptno),1,'TOTAL',0,deptno) example,sum(sal) from emp group by rollup(deptno); example SUM(SAL) ---------------------------------------- ----------

错误:

ORA-01722:无效号码

案例3:

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);
错误:预期字符数为

我正在尝试上面的方法,期望得到相同的输出,但它显示了来自的差异

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

在第一个查询中,第一个结果是
TOTAL
,一种字符串类型,因此列类型是字符串,可以将
deptno
转换为字符串


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

请显示您的表结构好吗?关于此链接的解释是什么:第二个解码的操作完全相同(我想,我错了吗?)。我只是想了解一下。选择(1时的案例分组(deptno)然后0时的“全部”然后deptno结束)例如,通过汇总(deptno)从emp组求和(sal)。。。我已经试过了,但是我已经成功了number@JorgeCampos不确定您的意思,但是链接中的第二个解码“
解码(分组(job_id),1,'All Jobs',job_id)AS job
”,如果分组的值为1,则返回
所有Jobs
(字符串),用于所有其他值
job_id
。由于第一个值,
All Jobs
是字符串,因此列类型将是字符串类型。
 select (case grouping(deptno) when 1 then 'all' when 0 then deptno end) example,sum(sal) from emp group by rollup(deptno)