今天单位一位同事问我,说在一个select里的order by 后面接了 case when是什么意思?例子如下:
-
order by CASE WHEN ref.IS_TOP=1 THEN 1 ELSE 0 END DESC
我用一个例子来解释这个问题,用到了Oracle自带的用户scott下的emp表
-
SQL> SELECT EMPNO, ENAME, DEPTNO
-
FROM SCOTT.EMP A
-
ORDER BY CASE WHEN A.DEPTNO = 20 THEN 1 ELSE 0 END DESC;
-
-
EMPNO ENAME DEPTNO
-
---------- ---------- ----------
-
7902 FORD 20
-
7788 SCOTT 20
-
7876 ADAMS 20
-
7369 SMITH 20
-
7566 JONES 20
-
7839 KING 10
-
7844 TURNER 30
-
7900 JAMES 30
-
7934 MILLER 10
-
7698 BLAKE 30
-
7654 MARTIN 30
-
-
EMPNO ENAME DEPTNO
-
---------- ---------- ----------
-
7521 WARD 30
-
7499 ALLEN 30
-
7782 CLARK 10
-
-
14 rows selected.
从上面这个例子能看到,oracle把dept=20的排了序,dept不等于20的,没有处理,胡乱排,因为我加了desc 参数,所以到倒序,在看看asc的效果
-
SQL> SELECT EMPNO, ENAME, DEPTNO
-
FROM SCOTT.EMP A
-
ORDER BY CASE WHEN A.DEPTNO = 20 THEN 1 ELSE 0 END ASC; 2 3
-
-
EMPNO ENAME DEPTNO
-
---------- ---------- ----------
-
7782 CLARK 10
-
7900 JAMES 30
-
7844 TURNER 30
-
7839 KING 10
-
7934 MILLER 10
-
7499 ALLEN 30
-
7521 WARD 30
-
7654 MARTIN 30
-
7698 BLAKE 30
-
7788 SCOTT 20
-
7566 JONES 20
-
-
EMPNO ENAME DEPTNO
-
---------- ---------- ----------
-
7902 FORD 20
-
7876 ADAMS 20
-
7369 SMITH 20
-
-
14 rows selected.
和我们预期的一致,dept等于20的在最下面。
总结:
假如需要让一个列的某些值排序的话,可以用这个方法哦。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/20893244/viewspace-2146478/
,如需转载,请注明出处,否则将追究法律责任。