Oracle的order by case when


今天单位一位同事问我,说在一个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/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/20893244/viewspace-2146478/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值