【发布时间】:2020-01-31 03:21:47
【问题描述】:
我正在尝试使用 oracle 中提供的 EMP 表来练习透视,方法是选择 job 作为列,ename 作为值。 这是我目前得到的查询。
select distinct job, count(job) from emp group by job ... (A) -- Result) -- CLERK 4 -- SALESMAN 4 -- PRESIDENT 1 -- MANAGER 3 -- ANALYST 2 select t1.ename, t2.ename, t3.ename, t4.ename, t5.ename from (select ename, rank() over (order by ename) as n from emp where job = 'CLERK') t1, (select ename, rank() over (order by ename) as n from emp where job = 'SALESMAN') t2, (select ename, rank() over (order by ename) as n from emp where job = 'PRESIDENT') t3, (select ename, rank() over (order by ename) as n from emp where job = 'MANAGER') t4, (select ename, rank() over (order by ename) as n from emp where job = 'ANALYST') t5, (select ename, rank() over (order by ename) as n from emp where job = (select job ... (C) from emp group by job having count(*) = ( select max(count(*)) from emp group by job)) ) t6 where t6.n = t1.n(+) and t6.n = t2.n(+) and t6.n = t3.n(+) and t6.n = t4.n(+) and t6.n = t5.n(+) order by t6.n;
output: ORA-00937: not a single-group group function ... (B)
但是输出是 (B),因为从 (A) 中可以看出,有两个工作(文员、销售员)的值均为 4。
问题)
有没有办法修改(C),所以它只会选择一个作业,尽管(A),因为我只想为所有作业创建足够的列以在旋转后适应?
希望我说清楚了。
* 完成查询 *
select t1.ename "Clerk", t2.ename "Salesman", t3.ename "President", t4.ename "Manager", t5.ename "Analyst" from (select ename, rank() over (order by ename) as n from emp where job = 'CLERK') t1, (select ename, rank() over (order by ename) as n from emp where job = 'SALESMAN') t2, (select ename, rank() over (order by ename) as n from emp where job = 'PRESIDENT') t3, (select ename, rank() over (order by ename) as n from emp where job = 'MANAGER') t4, (select ename, rank() over (order by ename) as n from emp where job = 'ANALYST') t5, (select ename, rank() over (order by ename) as n from emp where job = (select job from (select * from ( select job, count(job) from emp group by job order by count(job) desc) where rownum = 1))) t6 where t6.n = t1.n(+) and t6.n = t2.n(+) and t6.n = t3.n(+) and t6.n = t4.n(+) and t6.n = t5.n(+) order by t6.n;
【问题讨论】: