1 问题
对如下的结果集,要根据某些条件逻辑来排序。例如,若JOB是“SALESMAN”,则根据COMM排序;否则,根据SAL排序。
ENAME | SAL | JOB | COMM |
---|---|---|---|
TURNER | 1500 | SALESMAN | 300 |
ALLEN | 1500 | CLERK | 500 |
... | ... | ... | ... |
2 解决方案
解决方案有两种。
2.1 方案一
在order by
字句中使用case
表达式:
select ename,sal,job,comm from emp
order by case when job='SALESMAN' then comm else sal end;
select ename,sal,job,comm from emp
order by case when job='SALESMAN' then comm else sal end;
2.2 方案二
使用case
表达式来动态改变待排序的列:
select ename,sal,job,comm
case when job='SALESMAN' then comm else sal end as orderd
from emp
order by ordered;