Oracle的order by case when

甲骨文技術支援發表於2017-10-26

今天單位一位同事問我,說在一個select裡的order by 後面接了 case when是什麼意思?例子如下:


  1. order by CASE WHEN ref.IS_TOP=1 THEN 1 ELSE 0 END DESC
我用一個例子來解釋這個問題,用到了Oracle自帶的使用者scott下的emp表


  1. SQL> SELECT EMPNO, ENAME, DEPTNO
  2.   FROM SCOTT.EMP A
  3.  ORDER BY CASE WHEN A.DEPTNO = 20 THEN 1 ELSE 0 END DESC; 

  4.      EMPNO ENAME     DEPTNO
  5. ---------- ---------- ----------
  6.       7902 FORD      20
  7.       7788 SCOTT     20
  8.       7876 ADAMS     20
  9.       7369 SMITH     20
  10.       7566 JONES     20
  11.       7839 KING      10
  12.       7844 TURNER    30
  13.       7900 JAMES     30
  14.       7934 MILLER    10
  15.       7698 BLAKE     30
  16.       7654 MARTIN    30

  17.      EMPNO ENAME     DEPTNO
  18. ---------- ---------- ----------
  19.       7521 WARD      30
  20.       7499 ALLEN     30
  21.       7782 CLARK     10

  22. 14 rows selected.
從上面這個例子能看到,oracle把dept=20的排了序,dept不等於20的,沒有處理,胡亂排,因為我加了desc 引數,所以到倒序,在看看asc的效果


  1. SQL> SELECT EMPNO, ENAME, DEPTNO
  2.   FROM SCOTT.EMP A
  3.  ORDER BY CASE WHEN A.DEPTNO = 20 THEN 1 ELSE 0 END ASC; 2 3

  4.      EMPNO ENAME     DEPTNO
  5. ---------- ---------- ----------
  6.       7782 CLARK     10
  7.       7900 JAMES     30
  8.       7844 TURNER     30
  9.       7839 KING      10
  10.       7934 MILLER     10
  11.       7499 ALLEN     30
  12.       7521 WARD      30
  13.       7654 MARTIN     30
  14.       7698 BLAKE     30
  15.       7788 SCOTT     20
  16.       7566 JONES     20

  17.      EMPNO ENAME     DEPTNO
  18. ---------- ---------- ----------
  19.       7902 FORD      20
  20.       7876 ADAMS     20
  21.       7369 SMITH     20

  22. 14 rows selected.

和我們預期的一致,dept等於20的在最下面。

總結:

假如需要讓一個列的某些值排序的話,可以用這個方法哦。




來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/20893244/viewspace-2146478/,如需轉載,請註明出處,否則將追究法律責任。

相關文章