SQL 依据条件逻辑动态调整排序项,你希望按照某个条件逻辑来排序。例如,如果 JOB
等于 SALESMAN
,就要按照 COMM
来排序;否则,按照 SAL
排序。你希望返回如下所示的结果集。
SQL 依据条件逻辑动态调整排序项 问题
你希望按照某个条件逻辑来排序。例如,如果 JOB
等于 SALESMAN
,就要按照 COMM
来排序;否则,按照 SAL
排序。你希望返回如下所示的结果集。
ENAME SAL JOB COMM
---------- ---------- --------- ----------
TURNER 1500 SALESMAN 0
ALLEN 1600 SALESMAN 300
WARD 1250 SALESMAN 500
SMITH 800 CLERK
JAMES 950 CLERK
ADAMS 1100 CLERK
MARTIN 1250 SALESMAN 1300
MILLER 1300 CLERK
CLARK 2450 MANAGER
BLAKE 2850 MANAGER
JONES 2975 MANAGER
SCOTT 3000 ANALYST
FORD 3000 ANALYST
KING 5000 PRESIDENT
SQL 依据条件逻辑动态调整排序项 解决方案
在 ORDER BY
子句里使用 CASE
表达式。
select ename,sal,job,comm
from emp
order by case when job = 'SALESMAN' then comm else sal end
SQL 依据条件逻辑动态调整排序项 扩展知识
可以利用 CASE
表达式来动态调整结果的排序方式。上述示例代码中传递给 ORDER BY
的值如下所示。
select ename,sal,job,comm,
case when job = 'SALESMAN' then comm else sal end as ordered
from emp
order by 5
ENAME SAL JOB COMM ORDERED
---------- ---------- --------- ---------- ----------
TURNER 1500 SALESMAN 0 0
ALLEN 1600 SALESMAN 300 300
WARD 1250 SALESMAN 500 500
SMITH 800 CLERK 800
JAMES 950 CLERK 950
ADAMS 1100 CLERK 1100
MARTIN 1250 SALESMAN 1300 1300
MILLER 1300 CLERK 1300
CLARK 2450 MANAGER 2450
BLAKE 2850 MANAGER 2850
JONES 2975 MANAGER 2975
SCOTT 3000 ANALYST 3000
FORD 3000 ANALYST 3000
KING 5000 PRESIDENT 5000