SQL 依据条件逻辑动态调整排序项

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程