本帖最后由 huang_w 于 2011-02-16 17:22:48 编辑

解决方案 »

  1.   

    SQL> select * from emp;
     
                    EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
    --------------------- ---------- --------- ----- ----------- --------- --------- ------
                     7369 SMITH      CLERK      7902 1980-12-17     968.12               20
                     7499 ALLEN      SALESMAN   7698 1981-2-20     1936.00    300.00     30
                     7521 WARD       SALESMAN   7698 1981-2-22     1512.50    500.00     30
                     7566 JONES      MANAGER    7839 1981-4-2      3599.75               20
                     7654 MARTIN     SALESMAN   7698 1981-9-28     1512.50   1400.00     30
                     7698 BLAKE      MANAGER    7839 1981-5-1      3448.50               30
                     7782 CLARK      MANAGER    7839 1981-6-9      2964.50               10
                     7788 SCOTT      ANALYST    7566 1987-4-19     3630.00               20
                     7839 KING       PRESIDENT       1981-11-17    6050.00               10
                     7844 TURNER     SALESMAN   7698 1981-9-8      1815.00      0.00     30
                     7876 ADAMS      CLERK      7788 1987-5-23     1331.00               20
                     7900 JAMES      CLERK      7698 1981-12-3     1149.50               30
                     7902 FORD       ANALYST    7566 1981-12-3     3630.00               20
                     7934 MILLER     CLERK      7782 1982-1-23     1573.00               10
     
    14 rows selected
     
    SQL> 
    SQL> SELECT empno, ename, SUM(sal) sal
      2    FROM (SELECT connect_by_root(t.empno) empno,
      3                 connect_by_root(t.ename) ename,
      4                 sal
      5            FROM emp t
      6          CONNECT BY PRIOR t.empno = t.mgr)
      7   GROUP BY empno, ename;
     
         EMPNO ENAME             SAL
    ---------- ---------- ----------
          7521 WARD           1512.5
          7844 TURNER           1815
          7876 ADAMS            1331
          7566 JONES        13158.87
          7499 ALLEN            1936
          7782 CLARK          4537.5
          7369 SMITH          968.12
          7839 KING         35120.37
          7902 FORD          4598.12
          7900 JAMES          1149.5
          7698 BLAKE           11374
          7788 SCOTT            4961
          7654 MARTIN         1512.5
          7934 MILLER           1573
     
    14 rows selected
     
    SQL>