case when的疑问

OSHAPPY 2012-07-08 05:09:46
数据库里有1,2,3,4,5共5条记录,要用一条sql语句让其排序,使它排列成4,5,1,2,3
第一种:
select * from o
order by case id when 4 then 1
when 5 then 2
when 1 then 3
when 2 then 4
when 3 then 5 end
第二种:
select * from o
order by case when id = 4 then 1 end,
case when id = 5 then 2 end,
case when id = 1 then 3 end,
case when id = 2 then 4 end,
case when id = 3 then 5 end
第一种方式可以实现功能,但第二种方式却不能,为什么?这两种方式有什么区别???
...全文
69 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
OSHAPPY 2012-07-08
  • 打赏
  • 举报
回复
明白啦,谢谢
以学习为目的 2012-07-08
  • 打赏
  • 举报
回复

--正确
select * from o
order by
case
when id = 4 then 1
when id = 5 then 2
when id = 1 then 3
when id = 2 then 4
when id = 3 then 5
end

--错误
select * from o
order by case when id = 4 then 1 end,--end当id<>4时,语句就停止了
case when id = 5 then 2 end,
case when id = 1 then 3 end,
case when id = 2 then 4 end,
case when id = 3 then 5 end

OSHAPPY 2012-07-08
  • 打赏
  • 举报
回复
不是很明白,为什么去掉end就可以了?
百年树人 2012-07-08
  • 打赏
  • 举报
回复
还有一种方法
select * from o  
order by
charindex(','+ltrim(id)+',',',4,5,1,2,3,')
百年树人 2012-07-08
  • 打赏
  • 举报
回复
第二种
select * from o  
order by
case
when id = 4 then 1
when id = 5 then 2
when id = 1 then 3
when id = 2 then 4
when id = 3 then 5
end

34,576

社区成员

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

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