http://topic.csdn.net/t/20040127/18/2682980.html

语法
[   ORDER   BY   {   order_by_expression   [   ASC   |   DESC   ]   }         [   ,...n   ]   ]

参数
order_by_expression

指定要排序的列。可以将排序列指定为列名或列的别名(可由表名或视图名限定)和表达式,或者指定为代表选择列表内的名称、别名或表达式的位置的负整数。

可指定多个排序列。ORDER   BY   子句中的排序列序列定义排序结果集的结构。

ORDER   BY   子句可包括未出现在此选择列表中的项目。然而,如果指定   SELECT   DISTINCT,或者如果   SELECT   语句包含   UNION   运算符,则排序列必定出现在选择列表中。

此外,当   SELECT   语句包含   UNION   运算符时,列名或列的别名必须是在第一选择列表内指定的列名或列的别名。

说明     在   ORDER   BY   子句中不能使用   ntext、text   和   image   列。

ASC

指定按递增顺序,从最低值到最高值对指定列中的值进行排序。

DESC

指定按递减顺序,从最高值到最低值对指定列中的值进行排序。

空值被视为最低的可能值。

对   ORDER   BY   子句中的项目数没有限制。然而,对于排序操作所需的中间级工作表的大小有   8,060   字节的限制。这限制了在   ORDER   BY   子句中指定的列的合计大小。

===

大家还是没有明白我的意思,还是举例说明吧
有这样一个表tt(bmid   int,boardid   int,parentid   int)
如果用select   *   from   tt;结果集如下:
bmid                 boardid           parentid        
-----------   -----------   -----------  
1                       1                       9
2                       2                       17
5                       3                       18
9                       0                       0
15                     0                       0
16                     4                       17
17                     0                       0
18                     0                       0
5                       3                       18

(所影响的行数为   9   行)
而用select   *   from   tt   order   by   (case   when   parentid=0   then   bmid   else   parentid   end),parentid,bmid,boardid;结果集如下:
bmid                 boardid           parentid        
-----------   -----------   -----------  
9                       0                       0
1                       1                       9
15                     0                       0
17                     0                       0
2                       2                       17
16                     4                       17
18                     0                       0
5                       3                       18
5                       3                       18

(所影响的行数为   9   行)
我不明白的是第二种情况为什么不是以下这种情况呢?
bmid                 boardid           parentid        
-----------   -----------   -----------  
9                       0                       0
15                     0                       0
17                     0                       0
18                     0                       0
1                       1                       9
2                       2                       17
16                     4                       17
5                       3                       18
5                       3                       18

(所影响的行数为   9   行)

========

create   table   tt
(
bmid   int,
boardid   int,
parentid   int
)

insert   into   tt   values(1,   1,   9)
insert   into   tt   values(2,   2,   17)
insert   into   tt   values(5,   3,   18)
insert   into   tt   values(9,   0,   0)
insert   into   tt   values(15,   0,   0)
insert   into   tt   values(16,   4,   17)
insert   into   tt   values(17,   0,   0)
insert   into   tt   values(18,   0,   0)
insert   into   tt   values(5,   3,   18)
go

--你的方法
select   *   from   tt   order   by   (case   when   parentid=0   then   bmid   else   parentid   end),parentid,bmid,boardid;

--等效的方法
select   (case   when   parentid=0   then   bmid   else   parentid   end)   as   myid,   *  
from   tt
order   by   myid,parentid,bmid,boardid

--结果必然是
myid                 bmid                 boardid           parentid        
-----------   -----------   -----------   -----------  
9                       9                       0                       0
9                       1                       1                       9
15                     15                     0                       0
17                     17                     0                       0
17                     2                       2                       17
17                     16                     4                       17
18                     18                     0                       0
18                     5                       3                       18
18                     5                       3                       18

order by case when相关推荐

  1. order by 子句 后面跟 case when

    order by 子句 后面跟 case when 不再是排序 可以理解为分组排序(group by) 比如说,学生排队,凡是姓张的,我们给他们贴个标签"1",凡是姓李的,我们给他 ...

  2. case when then else end

    1.根据数据库表中特定的值进行排序显示 select * from tablename where order by case when columname='' then 1 wnen column ...

  3. SQLServer中Case的用法

    < DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd> CASE 可能是 SQL ...

  4. SQL CASE When THEN END 行列转换,复杂查询

    使用 CASE CASE 函数是特殊的 Transact-SQL 表达式,它允许按列值显式可选值.数据中的更改是临时的,没有对数据进行永久更改.例如,CASE 函数可以在 state 列中有 CA 值 ...

  5. SQL CASE WHEN用法

    SQL CASE WHEN用法 CASE 可能是 SQL 中被误用最多的关键字之一.虽然你可能以前用过这个关键字来创建字段,但是它还具有更多用法.例如,你可以在 WHERE 子句中使用 CASE . ...

  6. mysql能用case嵌套sql吗,关于sqlserver中查询语句中嵌套case语句使用方法

    ryxxlong的博客 Sql server 中的 CASE 语句文章, 链接 http://ryxxlong.iteye.com/blog/531221 写的比较详细,具体内容如下,主要用于自己以后 ...

  7. case when的判断顺序_CASE 表达式

    一.语法及作用 使用CASE表达式可以帮助我们解决复杂的查询问题,相当于条件判断的函数,判断每一行是不是满足条件. CASE WHEN (判断表达式) THEN (表达式)WHEN (判断表达式) T ...

  8. Oracle的CASE语句和表达式

    http://space.itpub.net/15203236/viewspace-534849 Oracle的CASE语句和表达式 上一篇 /下一篇  2009-01-09 23:19:46 / 天 ...

  9. sql中的case when

    sql语言中有没有类似C语言中的switch case的语句?? 没有,用case   when   来代替就行了.              例如,下面的语句显示中文年月           sel ...

最新文章

  1. Apache 与Tomcat
  2. c++(和opencv)如何把局部变量变成全局变量的功能
  3. react 条件渲染
  4. 看到喜欢的人时的心跳​
  5. mysql 5.1 concat min_MySQL 5.1+ 数据库报错注入利用
  6. noi 3531 判断整除
  7. 运维安全加固规范_DBA如何巧用“三十六计”保障数据库安全?
  8. 关闭centos6.7不必要的服务
  9. Centos 7安装Zabbix6.0
  10. 高手 读书笔记-1.精英社会的神话
  11. 大于2019电大计算机应用上机表格题,2019年电大计算机应用基础试题及答案重要知识点...
  12. CUDA编程第五章: 共享内存常量内存
  13. 情商高的人所看透的四种人生真相
  14. 【List】个人 常用学习工作软件清单
  15. 输入文字后不会自动变长的下划线如何制作
  16. windows下编译chromium浏览器的方法
  17. visio消除直线连接圆弧
  18. 教育科研先进个人发言稿
  19. 项目管理中如何做好相关方(干系人)管理?
  20. 数据结构 | 随机存取、顺序存取、随机存储和顺序存储

热门文章

  1. 《每日一题》738. Monotone Increasing Digits 单调递增的数字
  2. 28335的CPU定时器解析
  3. Ubuntu下安装pycharm遇到的一些问题解决方法
  4. 【MFC】工具栏按钮追加显示文本
  5. 【ARM】Tiny4412裸板编程之按键(C语言)
  6. 【C++】 C++标准模板库(一) Vector
  7. 网口扫盲一:网卡初步认识
  8. python coding_Python终极coding
  9. 送计算机教授教师节礼物,教师节送教授什么礼物好
  10. Hbase(3)——desc、alter、时间戳