对order by的疑问

小宏 2011-10-20 09:09:59

ORDER BY 酒店,CASE WHEN 星期= '星期一' THEN 1
WHEN 星期= '星期二' THEN 2
WHEN 星期= '星期三' THEN 3
WHEN 星期= '星期四' THEN 4
WHEN 星期= '星期五' THEN 5
WHEN 星期= '星期六' THEN 6
WHEN 星期= '星期日' THEN 7
WHEN 星期= '合计' THEN 8
END,


这个是NBDBA回复某个朋友的帖子,我对order by这边排序的原理不太明白,谁给疏导一下哈哈~
...全文
86 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
kensouterry 2011-10-21
  • 打赏
  • 举报
回复
恩 路过学习一下了
wfkmu 2011-10-20
  • 打赏
  • 举报
回复
支持一下
--小F-- 2011-10-20
  • 打赏
  • 举报
回复
其实可以理解为按照THRN后面的来排前面的序
geniuswjt 2011-10-20
  • 打赏
  • 举报
回复

--其实有时间字段的话你可以直接
ORDER BY 酒店,datepart(weekday,时间字段)
中国风 2011-10-20
  • 打赏
  • 举报
回复
最好看一下联机case when 用法


use tempdb
go
--> --> (Roy)生成測試數據

if not object_id('Tempdb..#T') is null
drop table #T
Go
Create table #T(星期 nvarchar(50))
Insert #T
select '星期一' union all
select '星期二' union all
select '星期三' union all
select '星期四' union all
select '星期五' union all
select '星期六' union all
select '星期日' union all
select '合计'

Go

select 星期,
CASE WHEN 星期= '星期一' THEN 1
WHEN 星期= '星期二' THEN 2
WHEN 星期= '星期三' THEN 3
WHEN 星期= '星期四' THEN 4
WHEN 星期= '星期五' THEN 5
WHEN 星期= '星期六' THEN 6
WHEN 星期= '星期日' THEN 7
WHEN 星期= '合计' THEN 8
END as 字段
from #T
order by 字段

/*
星期 字段
星期一 1
星期二 2
星期三 3
星期四 4
星期五 5
星期六 6
星期日 7
合计 8
*/
中国风 2011-10-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 happyandsad 的回复:]

SQL code

CASE WHEN 星期= '星期一' THEN 1
WHEN 星期= '星期二' THEN 2
WHEN 星期= '星期三' THEN 3
WHEN 星期= '星期四' THEN 4
WHEN 星期= '星期五' THEN 5
WHEN 星期= '星期六' THEN 6
WHEN 星期= '星期日' THEN 7
WHEN 星期=……
[/Quote]

看转换效果

use tempdb
go
--> --> (Roy)生成測試數據

if not object_id('Tempdb..#T') is null
drop table #T
Go
Create table #T(星期 nvarchar(50))
Insert #T
select '星期一' union all
select '星期二' union all
select '星期三' union all
select '星期四' union all
select '星期五' union all
select '星期六' union all
select '星期日' union all
select '合计'

Go

select
CASE WHEN 星期= '星期一' THEN 1
WHEN 星期= '星期二' THEN 2
WHEN 星期= '星期三' THEN 3
WHEN 星期= '星期四' THEN 4
WHEN 星期= '星期五' THEN 5
WHEN 星期= '星期六' THEN 6
WHEN 星期= '星期日' THEN 7
WHEN 星期= '合计' THEN 8
END as 字段
from #T
order by 字段

/*
1
2
3
4
5
6
7
8
*/
小宏 2011-10-20
  • 打赏
  • 举报
回复

CASE WHEN 星期= '星期一' THEN 1
WHEN 星期= '星期二' THEN 2
WHEN 星期= '星期三' THEN 3
WHEN 星期= '星期四' THEN 4
WHEN 星期= '星期五' THEN 5
WHEN 星期= '星期六' THEN 6
WHEN 星期= '星期日' THEN 7
WHEN 星期= '合计' THEN 8
END
order by 后面的这个应该这么理解
select
CASE WHEN 星期= '星期一' THEN 1
WHEN 星期= '星期二' THEN 2
WHEN 星期= '星期三' THEN 3
WHEN 星期= '星期四' THEN 4
WHEN 星期= '星期五' THEN 5
WHEN 星期= '星期六' THEN 6
WHEN 星期= '星期日' THEN 7
WHEN 星期= '合计' THEN 8
END as 字段
order by 字段
只是字段没有在select里面显示
小宏 2011-10-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jevin8011 的回复:]
这个ORDER BY,你把 CASE .... END 整个看做是一个 1到8 的整数就明白了.
[/Quote]
呵呵这个我明白,感觉按这个排序有点总有点怪
Mr_Nice 2011-10-20
  • 打赏
  • 举报
回复
ORDER BY 酒店,数字 (1~8)

就是让星期1,2按照顺序排列 ,最后是合计 。
中国风 2011-10-20
  • 打赏
  • 举报
回复
case when...放在select 后面看显示就用了

这是转换当 星期 列= '星期一' 转为1。。。。。。
jevin8011 2011-10-20
  • 打赏
  • 举报
回复
这个ORDER BY,你把 CASE .... END 整个看做是一个 1到8 的整数就明白了.

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧