【问题标题】:ORACLE SQL it is possible to customize the order result of a query?ORACLE SQL 可以自定义查询的顺序结果吗?
【发布时间】:2015-04-06 08:41:33
【问题描述】:

我有一种情况,我需要按如下自定义顺序对查询结果进行排序:

DEPARTEMENT_ID 需要按照这个顺序(10 然后 50 然后 20)

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

【问题讨论】:

    标签: sql oracle-sqldeveloper


    【解决方案1】:

    您可以在 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>
    

    【讨论】:

      【解决方案2】:

      您可以做到这一点的一种方法是让另一列 DISPLAY_ORDER 按您想要的顺序包含序列号数据。

      所以 sql 将是

      select JOB_ID, DEPARTMENT_ID 
      from EMPLOYEES
      order by DISPLAY_ORDER;
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2019-06-26
          • 1970-01-01
          • 1970-01-01
          • 2017-11-18
          • 2012-10-31
          • 2013-02-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多