select cast(lpad(empno, length(lev) / 2) || ename as varchar2(25)) empnoname,
hiredate,
mgr
from (select lev || to_char(emp.hiredate, 'yyyymmdd') lev,
emp.empno,
emp.ename,
emp.hiredate,
emp.mgr
from emp,
(select lev || to_char(emp.hiredate, 'yyyymmdd') lev, emp.empno
from emp,
(select lev || to_char(emp.hiredate, 'yyyymmdd') lev, emp.empno
from emp,
(select to_char(emp.hiredate, 'yyyymmdd') lev, empno
from emp
where mgr is null) emp1
where emp.mgr = emp1.empno) emp2
where emp.mgr = emp2.empno) emp3
where emp.mgr = emp3.empno
union all
select lev || to_char(emp.hiredate, 'yyyymmdd') lev,
emp.empno,
emp.ename,
emp.hiredate,
emp.mgr
from emp,
(select lev || to_char(emp.hiredate, 'yyyymmdd') lev, emp.empno
from emp,
(select to_char(emp.hiredate, 'yyyymmdd') lev, empno
from emp
where mgr is null) emp1
where emp.mgr = emp1.empno) emp2
where emp.mgr = emp2.empno
union all
select lev || to_char(emp.hiredate, 'yyyymmdd') lev,
emp.empno,
emp.ename,
emp.hiredate,
emp.mgr
from emp,
(select to_char(emp.hiredate, 'yyyymmdd') lev, empno
from emp
where mgr is null) emp1
where emp.mgr = emp1.empno
union all
select to_char(emp.hiredate, 'yyyymmdd') lev, empno, ename, hiredate, mgr
from emp
where mgr is null)
order by lev;
顶一下
感觉我的方法比较笨.
|