Sql oracle中的解码生成差异输出
错误: ORA-01722:无效号码 案例3: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) ---------------------------------------- ----------
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)