工作中会遇到有些复杂的查询排序,例如领导想看绩效成绩低于某指定成绩的员工信息,或许会感兴趣工资在某区间的员工信息等等,比如对于EMP表我们需要查询工资在1000到2000 之间的员工及把查询结果排在前面,这时候可以新生成一列,通过多列查询,例如:
SQL> SELECT empno AS 工号, ename AS 姓名, CASE WHEN sal>=1000 AND sal<2000 THEN 1 ELSE 2 END AS 级别, sal AS 工资 FROM emp WHERE deptno=30 ORDER BY 3,4; 工号 姓名 级别 工资 ----- ---------- ---------- --------- 7654 MARTIN 1 1250.00 7521 WARD 1 1250.00 7844 TURNER 1 1500.00 7499 ALLEN 1 1600.00 7900 JAMES 2 950.00 7698 BLAKE 2 2850.00 6 rows selected
从结果可以看出来工资不在1000到2000范围内的员工排在下面,或者也可以不显示"级别"字段,只需要CASE WHEN 语句写在ORDER BY 里面,如下面:
SQL> SELECT empno AS 工号, 2 ename AS 姓名, 3 sal AS 工资 4 FROM emp 5 WHERE deptno=30 6 ORDER BY CASE WHEN sal>=1000 AND sal<2000 THEN 1 ELSE 2 END,3; 姓名 姓名 工资 ----- ---------- --------- 7654 MARTIN 1250.00 7521 WARD 1250.00 7844 TURNER 1500.00 7499 ALLEN 1600.00 7900 JAMES 950.00 7698 BLAKE 2850.00 6 rows selected