Oracle中,平时我们排序常用“Order by 列名” 的方式来排序,但是有的时候我们希望这个列中的某些元素排在前面或者后面或者中间的某个位置。

这时我们可以使用Order by case when then方法。

举例:我们希望本部门的领导的名字在前面。

Select * from parter where lvl='leader' order by ( case when name in('zhangsan','lisi','wangermazi') then 0 else 1 end)

实现的效果是:'zhangsan','lisi','wangermazi'  从头到尾依次排序,剩下的元素排在这三个元素的后面随机排序。把1和0替换,又变成了‘wangermazi’,'lisi','zhangsan'的顺序倒序排序了。

0是我们需要的元素的位置,1是其他元素的位置。

同样的效果我们也可以通过“decode”函数实现

Select * from parter where lvl = 'leader' order by decode(name,'zhangsan',0,'lisi',1,'wangermazi',2,3)

实现的效果与上面相同,其中0,1,2是我们需要的三个元素的位置,3是其他元素的位置。

但是第一个SQL语句有一个问题,如果name字段就只有这三个元素,那么when 完全满足条件,这样这三个元素就变成随机排序了。

所以如果使用case 函数,最好是使用这种方式

Select * from parter where lvl='leader' order by (case when name='zhangsan' then 0 when name='lisi' then 1 name='wangermazi' then 2 else 3 end)

如此,即便name字段只有三个元素,也能按照我们的需求排序了。

需要注意的是,只有我们需要的三个元素是按照我们的所定义的顺序排序的,其余元素是随机排序的,如果我们需要其余元素按照某个字段顺序或者倒序排序,只需要在最后面加逗号字段名即可。

Select * from parter where lvl='leader' order by (case when name='zhangsan' then 0 when name='lisi' then 1 name='wangermazi' then 2 else 3 end),id desc

decode函数相同

Select * from parter where lvl = 'leader' order by decode(name,'zhangsan',0,'lisi',1,'wangermazi',2,3),id desc

由上面的例子我们知道,那些数字就是元素的位置,而如果我们要把自己需要的元素排最后面呢。

只需要改改数字就行了。

case 函数

Select * from parter where lvl='leader' order by (case when name='zhangsan' then 3 when name='lisi' then 2 name='wangermazi' then 1 else 0 end).id desc

decode函数相同

Select * from parter where lvl = 'leader' order by decode(name,'zhangsan',3,'lisi',2,'wangermazi',1,0),id desc

而强大的decode函数还为我们可以将余下的元素按照自己的想法排序。

假如我们要把'zhangsan'和'lisi'排最后,而把'wangermazi'排第一,这时我们可以同时使用两个decode函数

Select * from parter where lvl = 'leader' order by decode(name,'zhangsan',3,'lisi',2,0),decode(name,'wangermazi',0),id desc

如此我们便实现了张三和李四分别排倒数第一和倒数第二,王二麻子排第一,其余元素按照id倒序排列。

如此我们便实现了自己需要的元素按照特定的顺序排序。

【SQL】将特定的元素按照自己所需的位置排序的更多相关文章

  1. [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)

    原文:[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) [顶]ORACLE PL/SQL编程详解之二: PL/SQL块结构和组成元素(为山九仞,岂一日 ...

  2. SQL 按特定字段值排序

    SQL 按特定字段值排序的代码,有需要的朋友可以参考下. id, name shandong01 name1 shandong02 name2 shandong03 name3 beijing01 n ...

  3. 获取元素在浏览器中的绝对位置(从jquery1.8中抠出来)

    <style> html,body{margin:0;padding:0;} .d1{margin-left:40px;background:red;width:2000px;height ...

  4. javascript 常见数组操作( 1、数组整体元素修改 2、 数组筛选 3、jquery 元素转数组 4、获取两个数组中相同部分或者不同部分 5、数组去重并倒序排序 6、数组排序 7、数组截取slice 8、数组插入、删除splice(需明确位置) 9、数组遍历 10、jQuery根据元素值删除数组元素的方)

    主要内容: 1.数组整体元素修改 2. 数组筛选 3.jquery 元素转数组 4.获取两个数组中相同部分或者不同部分 5.数组去重并倒序排序 6.数组排序 7.数组截取slice 8.数组插入.删除 ...

  5. 关于元素设置margin-top能够改变body位置的原因及解决(子元素设置margin-top改变父元素定位)

    关于元素设置margin-top能够改变body位置的原因及解决(子元素设置margin-top改变父元素定位) 起因:在进行bootstrap的.navbar-brand内文字设置垂直居中时采用li ...

  6. Js数组里剔除指定的元素(不是指定的位置)

    s数组里删除指定的元素(不是指定的位置)之前一直是做后端的,从来也没有写过js,但是却一直想学学,也只是基于兴趣而已!现在到了这个公司,确实大量的写js.但也一直都是没有系统的去看过js!都是搞什么查 ...

  7. jquery获取元素在文档中的位置信息以及滚动条位置(转)

    jquery获取元素在文档中的位置信息以及滚动条位置 http://blog.csdn.net/qq_34095777/article/details/78750886     原文链接 原创 201 ...

  8. JS---动画函数封装:设置任意的一个元素,移动到指定的目标位置

    动画函数封装:设置任意的一个元素,移动到指定的目标位置 <!DOCTYPE html> <html lang="en"> <head> < ...

  9. html中如何获取元素在文档中的位置

    html中如何获取元素在文档中的位置 一.总结 一句话总结: $("#elem").offset().top $("#elem").offset().left ...

随机推荐

  1. html实现圆角矩形

    问题:如何通过div+css以及定位来实现圆角矩形? 解决方法概述: 内容:首先在<body>标签内部里添加一个大层(大层用来固定整体大框架),然后大层内包含四个小层(四个小层里分别放四个 ...

  2. 在centos中使用rpm安装包安装jenkins

    jenkins下载:http://pkg.jenkins-ci.org/redhat/ 下载rpm包到本地 在linux下使用rpm包安装命令: sudo rpm -ih jenkins-1.562- ...

  3. 2015/9/2 Python基础(7):元组

    为什么要创造一个和列表差别不大的容器类型?元组和列表看起来不同的一点是元组用圆括号而列表用方括号.而最重要的是,元组是不可变类型.这就保证了元组的安全性.创造元组给它赋值和列表完全一样.除了一个元素的 ...

  4. bzoj 1058 bst

    因为是数列的维护,所以我们可以考虑用splay来维护,每次在x插入的时候就在x+1前面插入就行了,然后用bst来维护两问的答案,但是应该会tle.我们来考虑这个问题的性质,首先因为这个数列没有删除操作 ...

  5. Python 关于时间和日期函数使用 -- (转)

    python中关于时间和日期函数有time和datatime   1.获取当前时间的两种方法: import datetime,time now = time.strftime("%Y-%m ...

  6. 报错注入遇到ERROR 1242 (21000): Subquery returns more than 1 row解决方案

    我的SQL语句是这样写的. mysql> select 1,2,3 and updatexml(1,concat(1,(select user from mysql.user),1),1);ER ...

  7. 打印 pmic register value

    打印 PMIC register value 方式有二種, 一種是使用 adb shell cat pmic register 一種是直接在 code 裡 call dump pmic registe ...

  8. centos6.5升级Linux内核步骤

    centos6.5升级Linux内核步骤 http://www.jianshu.com/p/c75f00182b4c 使用的操作系统是是centos6.5,按照官方的推荐的配置,把linux内核升级到 ...

  9. pandas+sqlalchemy 保存数据到mysql

    import pandas as pd from sqlalchemy import create_engine data3={"lsit1":[1,2],"lsit2& ...

  10. 【bzoj1072】SCOI2007排列

    状压dp,f[i][j]表示当前取了i,模数余j的状态. 然后向后推,枚举可能的数即可. 注意每个数存在重复,最后要除以相应出现次数的阶乘. #include<bits/stdc++.h> ...