你所不知道的SQL排序方法
来源:互联网 发布:小米查看支持什么网络 编辑:程序博客网 时间:2024/06/05 21:51
项目中需要对查询出的数据进行特定顺序的排序,一时犯了愁,
平时写SQL就不多,只知道order by 顺序或加desc倒序排序,
现在要打乱顺序来排,把本该在中间的数据提到前边,这可咋办?!
不怕,有需求就有解决方案,
项目某处发现了ORDER BY CASE WHEN形式的语句,
未曾见过,不知是何意。
经一番查询,这正是解决任意排序的关键。
举个简单例子:
CREATE TABLE Test(id INTEGER PRIMARY KEY,Num INTEGER)
GO
INSERT INTO Test (id,Num) values (1,4)
INSERT INTO Test (id,Num) values (2,3)
INSERT INTO Test (id,Num) values (3,2)
INSERT INTO Test (id,Num) values (4,1)
建以上表并存入数据
现在需要查询数据把Num = 2 的排到最前边,
其他数据按id的倒序来排列
只需如此如此:
- SELECT * FROM Test
- ORDER BYCASE Num
- WHEN 2 THEN 1
- ELSE 2
- END,
- <span style="white-space: pre;"> </span>idDESC
这句不过是在平时写的order by语句中间加上了
CASE Num
WHEN 2 THEN 0
ELSE 1
END
重点在那个 0、1
当Num = 2时,排序顺序为0
其他的排序顺序为1,
这个数字越小排得越靠前,
这里可以随便写数字,只要Num = 2 的小于其他的就可以满足需求。
如果有多项数据需要特定排序,只需根据不同的CASE设置1、2、3、4、5...即可
另外注意以下写法:
SELECT * FROM Test
ORDER BY 2 DESC
这么写的那个2代表按照第二个字段倒序排列,而且这个数字只能 <= 字段数目,否则会报错
不要和上边的写法混淆,不是同样的意义
这个博客是转载我男盆友的~~~~
- 你所不知道的SQL排序方法
- 你所不知道的SQL排序方法
- 你所不知道的Activity方法
- 你所不知道的Activity方法
- 你所不知道的Activity方法
- 你所不知道list的妙用
- 你所不知道的西安
- 你所不知道的知识
- 你所不知道的华为(z)
- 你所不知道的const
- 告诉你所不知道的typedef
- 告诉你所不知道的typedef
- 你所不知道的台湾宗教
- 你所不知道的8020法则
- 你所不知道的传输层
- 你所不知道的传输层
- 扑克你所不知道的
- 你所不知道的传输层
- 找出字符串中对称的子字符串的最大长度(最长回文)
- maven中添加proguard来混淆代码
- ASP.NET图片上传
- 四对括号可以有多少种匹配排列方式?比如两对括号可以有两种:()()和(())
- android中设置AlertDialog的大小
- 你所不知道的SQL排序方法
- 网络流算法整理
- Linux基本命令
- 【js跨域访问的一些解决方案】
- HDU 1548 A strange lift
- MFC中获取窗口句柄及相关函数
- Android RSS阅读器
- 用uri启动Qt的程序注意事项
- 【ERROR】query_log_injava.lang.IllegalArgumentException: Illegal character in query