ORACLE SQL可以自定义查询的订单结果吗?

时间:2015-04-06 08:41:33

标签: sql oracle-sqldeveloper

我有一个案例,我需要按照以下定制顺序订购查询结果:

enter image description here

DEPARTEMENT_ID需要按此顺序排列(10然后是50然后是20)

有没有办法得到这个结果?

3 个答案:

答案 0 :(得分:2)

您可以在 ORDER BY 子句中使用 CASE 表达式。

我在这里回答了一个类似的问题,https://stackoverflow.com/a/26033176/3989608,你可以调整它以在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>

答案 1 :(得分:1)

您可以采用的另一种方法是让另一列DISPLAY ORDER按照您想要的顺序包含序列号数据。

所以sql将是

select JOB_ID, DEPARTMENT_ID 
from EMPLOYEES
order by DISPLAY_ORDER;

答案 2 :(得分:1)

您可以使用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

DECODE