ORACLE SQL 是否可以自定义查询结果的顺序?
ORACLE SQL it is possible to customize the order result of a query?
我有一个案例,我需要按如下自定义顺序对查询结果进行排序:
DEPARTEMENT_ID
需要按此顺序(10 然后 50 然后 20)
有没有办法得到这个结果?
一种方法是让另一列 DISPLAY_ORDER 按您想要的顺序包含序列号数据。
所以 sql 将是
select JOB_ID, DEPARTMENT_ID
from EMPLOYEES
order by DISPLAY_ORDER;
您可以使用 DECODE
来完成此操作。
SELECT JOB_ID,DEPARTMENT_ID
FROM YOURTABLE
ORDER BY DECODE(DEPARTEMENT_ID, 10, 1, 50, 2, 20, 3,4)
有关详细信息,请参阅下面的这些线程。
Custom Order in Oracle SQL
您可以在 ORDER BY 子句中使用 CASE 表达式。
我在这里回答了一个类似的问题,,您可以调整它以在 CASE 表达式中包含您的自定义条件。
例如,
SQL> SELECT ename,
2 deptno
3 FROM emp
4 ORDER BY
5 CASE deptno
6 WHEN 20 THEN 1
7 WHEN 10 THEN 2
8 WHEN 30 THEN 3
9 END
10 /
ENAME DEPTNO
---------- ----------
SMITH 20
FORD 20
ADAMS 20
JONES 20
SCOTT 20
CLARK 10
KING 10
MILLER 10
ALLEN 30
TURNER 30
WARD 30
MARTIN 30
JAMES 30
BLAKE 30
14 rows selected.
SQL>
我有一个案例,我需要按如下自定义顺序对查询结果进行排序:
DEPARTEMENT_ID
需要按此顺序(10 然后 50 然后 20)
有没有办法得到这个结果?
一种方法是让另一列 DISPLAY_ORDER 按您想要的顺序包含序列号数据。
所以 sql 将是
select JOB_ID, DEPARTMENT_ID
from EMPLOYEES
order by DISPLAY_ORDER;
您可以使用 DECODE
来完成此操作。
SELECT JOB_ID,DEPARTMENT_ID
FROM YOURTABLE
ORDER BY DECODE(DEPARTEMENT_ID, 10, 1, 50, 2, 20, 3,4)
有关详细信息,请参阅下面的这些线程。
Custom Order in Oracle SQL
您可以在 ORDER BY 子句中使用 CASE 表达式。
我在这里回答了一个类似的问题,,您可以调整它以在 CASE 表达式中包含您的自定义条件。
例如,
SQL> SELECT ename,
2 deptno
3 FROM emp
4 ORDER BY
5 CASE deptno
6 WHEN 20 THEN 1
7 WHEN 10 THEN 2
8 WHEN 30 THEN 3
9 END
10 /
ENAME DEPTNO
---------- ----------
SMITH 20
FORD 20
ADAMS 20
JONES 20
SCOTT 20
CLARK 10
KING 10
MILLER 10
ALLEN 30
TURNER 30
WARD 30
MARTIN 30
JAMES 30
BLAKE 30
14 rows selected.
SQL>