表结构,测试数据 贴出来。 只给个表名,还得猜。只能说说思路,没猜错的话 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
--只能说说思路,没猜错的话 --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
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>
方法应该是一样的,但可能不是你提到的表: 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 二级
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
--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
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>
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 二级