ORDER By子句中的CASE表达式

javaiswhat 2008-12-12 12:25:57
导读:在ORDER BY用CASE表达式是一种技巧,这种技巧能让我们在列表中的自然值自身不能满足任务时进行习惯性排序。Oracle专家在本文中列举出了两个例子进行了解释。

关键词:ORDER By CASE CASE表达式 Oracle开发语言
Rudy Limeback,Oracle顾问。他从事数据库系统工作25年,自1987年开始从事基于SQL关系数据库,著有《实用网站数据库设计》一书,书中有大量关于SQL文章。查看此专家的所有答疑【TechTarget中国原创】问:前几天我阅读了一些有关在SELECT语句ORDER BY子句中用CASE表达式的一些指南。你能列举一些简单的例子解释一下吗?

  答:在ORDER BY用CASE表达式是一种技巧,这种技巧能让我们在列表中的自然值自身不能满足任务时进行习惯性排序。我将列举出两个例子。

  第一个例子所表达的情况就是当人力资源部想根据职位查看工资单的时候,首先要除开销售人员、其次就是IT职员、第三就是管理人员、最后是其他人,当然包括工资列表上的团队中的每个人。

  CASE表达式用来将职位“转化”成值满足sort sequence的需求。


SELECT position
, empno
, salary
FROM personnel
ORDER
BY CASE
WHEN position = 'sales' THEN 1
WHEN position = 'it' THEN 2
WHEN position = 'mgmt' THEN 3
ELSE 4 END


  CASE表达式实际上在表中其他的列上创建了一个单独的附加列。CASE表达式还会更给每行计算附加列值。这个附加列还会对结果集进行排序,但是它并没有返回到不是结果集中(除非你在SELECT子句中还包括CASE表达式)。由于职位名称排序不正确,不是ASC也不是DESC或他们本身,所以我们还是需要CASE表达式。
第二个例子很相似:


ELECT position
, empno
, salary
FROM personnel
ORDER
BY CASE
WHEN position = 'sales' THEN 'Curly'
WHEN position = 'it' THEN 'Larry'
WHEN position = 'mgmt' THEN 'Moe'
ELSE 'Shemp' END
, salary DESC


  你能理解了吗?

...全文
275 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sleepzzzzz 2008-12-12
  • 打赏
  • 举报
回复
值得学习,用法不错.

好象类似分析函数中的 partition by XX order by CC;
yf520gn 2008-12-12
  • 打赏
  • 举报
回复
..
maizijiankang 2008-12-12
  • 打赏
  • 举报
回复
恩恩 不错 学习中·~~
javaiswhat 2008-12-12
  • 打赏
  • 举报
回复
我也是觉不错,才贴过来的

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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