ORDER By子句中的CASE表达式
导读:在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
你能理解了吗?