查询员工基本信息,并显示他上级的姓名及上级工资等级(注意:将等级编号转换成相应的汉字表示,采用一条SQL语句完成)
用到 emp,salgrade表

解决方案 »

  1.   

    表结构,测试数据 贴出来。 只给个表名,还得猜。只能说说思路,没猜错的话
    1 emp表 a  限制是员工
    2 通过员工这行的“上级ID” 关联 emp表 b  取他的上级
    3 再从 b 关联salgrade表 c 取等级编号。
     最终取结果时,如果salgrade表没有等级的汉字表示,则用decode函数 select a.*,b.name 上级姓名,decode(c.level,'1','一级',2,'二级',3,'三级') 上级工资等级
     from emp a 
         join emp b on a.上级id = b.员工id
         join salgrade c on b.员工id = c.员工id
      

  2.   

    --只能说说思路,没猜错的话
    --1 emp表 a 限制是员工
    --2 通过员工这行的“上级ID” 关联 salgrade表 b 取他的上级信息
    --3 再关联salgrade表 b 取等级编号。
    --最终取结果时,如果salgrade表没有等级的汉字表示,则用decode函数
    --(意思就是如果b.level=1那么就是‘一级’,如果b.level=2那么就是‘二级’,以此类推) SELECT a.*
           ,b.name 上级姓名
            ,decode(b.level,'1','一级',2,'二级',3,'三级') 上级工资等级
       FROM emp a ,  salgrade b
      WHERE a.上级id = b.员工id
      

  3.   

    SQL> SELECT a.*,b.ename,b.ename 上级姓名,SUBSTR('零壹贰叁肆伍陆柒捌玖',c.grade+1,   1),c.grade
      2     FROM emp a ,emp b,  salgrade c
      3    WHERE a.mgr = b.empno and b.sal between c.losal and c.hisal
      4  ;
     
    EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO ENAME      上级姓名   SUBSTR('零壹贰叁肆伍陆柒捌玖',      GRADE
    ----- ---------- --------- ----- ----------- --------- --------- ------ ---------- ---------- ------------------------------ ----------
     7566 JONES      MANAGER    7839 1981-4-2      2975.00               20 KING       KING       伍                                      5
     7698 BLAKE      MANAGER    7839 1981-5-1      2850.00               30 KING       KING       伍                                      5
     7782 CLARK      MANAGER    7839 1981-6-9      2450.00               10 KING       KING       伍                                      5
     7876 ADAMS      CLERK      7788 1987-5-23     1100.00               20 SCOTT      SCOTT      肆                                      4
     7788 SCOTT      ANALYST    7566 1987-4-19     3000.00               20 JONES      JONES      肆                                      4
     7902 FORD       ANALYST    7566 1981-12-3     3000.00               20 JONES      JONES      肆                                      4
     7499 ALLEN      SALESMAN   7698 1981-2-20     1600.00    300.00     30 BLAKE      BLAKE      肆                                      4
     7521 WARD       SALESMAN   7698 1981-2-22     1250.00    500.00     30 BLAKE      BLAKE      肆                                      4
     7654 MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00     30 BLAKE      BLAKE      肆                                      4
     7844 TURNER     SALESMAN   7698 1981-9-8      1500.00      0.00     30 BLAKE      BLAKE      肆                                      4
     7900 JAMES      CLERK      7698 1981-12-3      950.00               30 BLAKE      BLAKE      肆                                      4
     7934 MILLER     CLERK      7782 1982-1-23     1300.00               10 CLARK      CLARK      肆                                      4
     
    12 rows selected
     
    SQL> 
      

  4.   

    方法应该是一样的,但可能不是你提到的表:
    T-SQL:
    SELECT 
           LPAD(' ',3*(LEVEL-1))||ENAME AS ENAME
           ,LPAD(' ',3*(LEVEL-1))||Job AS JOB
           ,decode(LEVEL,1,'一级',2,'二级',3,'三级') AS Grade
    FROM SCOTT.emp
    WHERE job<>'CLERK'
    START WITH MGR IS NULL
    CONNECT BY MGR=PRIOR empno;
    结果(贴过来,格式有点乱了):ENAME JOB        GRADE
    KING PRESIDENT 一级
      BLAKE   MANAGER 二级
      JONES   MANAGER 二级
        FORD     ANALYST 三级
        SCOTT   ANALYST 三级
        FORD     ANALYST 三级
      BLAKE   MANAGER 二级
        ALLEN   SALESMAN 三级
        WARD     SALESMAN 三级
        MARTIN  SALESMAN 三级
        TURNER  SALESMAN 三级
      CLARK   MANAGER 二级