【02单表查询】——05:CASE表达式
来源:互联网 发布:淘宝客户流失 编辑:程序博客网 时间:2024/06/06 00:33
CASE表达式是一个标量表达式,它基于条件逻辑返回一个值。注意,CASE是一个表达式,而不是一条语句;也就是说,不能用它来控制活动的流程,也不能根据条件逻辑来做某些处理,相反,它只是根据条件逻辑来返回摸个值。因为CASE是一个标量表达式,所以它可以支持任何标量表达式(如SELECT,WHERE,HAVING以及ORDER BY)、CHECK约束 等等。
CASE表达式有两种格式:简单表达式和搜索表达式
——简单表达式
CASE简单表达式是将一个值(或者标量表达式)与一组可能的值进行比较,并返回第一个匹配的结果。如果列表中没有值等于测试值,CASE表达式就返回其ELSE子句中列出的值;如果CASE中没有ELSE子句,则默认将其视为ELSE NULL。
例如:以下对Production.Products表的查询就在SELECT子句中使用了CASE表达式,以生成用于描述categoryid列值的信息
SELECT productid,productname,categoryid, CASE categoryid WHEN 1 THEN 'Beverages' WHEN 2 THEN 'Condiments' WHEN 3 THEN 'Confections' WHEN 4 THEN 'Dairy Products' WHEN 5 THEN 'Grains/Cereals' WHEN 6 THEN 'Meat/Poultry' WHEN 7 THEN 'Produce' WHEN 8 THEN 'Seafood' ELSE 'Unknown Category' END AS categroynameFROM Production.Products
该查询生成以下结果集
前面这个查询使用CASE表达式的一个简单例子,除非categoryid的种类非常少,而且是静态的,否则更好的设计选择可能应该在另外一个单独的表中来维护categoryid,当需要获取categoryid描述时,把那个表和Products进行连接操作
作为CASE简单表达式的另外一种演示,对Sales.OrderValues视图的查询先根据val逻辑顺序分成三个组,再把组的编号翻译成组的描述信息
SELECT orderid,custid,val, CASE Ntitle(3) OVER(ORDEY BY val) WHEN 1 THEN 'Low' WHEN 2 THEN 'Medium' WHEN 3 THEN 'Hign' ELSE 'Unknown' END AS titledescFROM Sales.OrderValuesORDER BY val
该查询会生成以下输出:
CASE简单表达式只有一个测试值,它紧跟在CASE 关键字后面,与WHEN中的一组可能值进行比较。
——CASE搜索表达式
CASE搜索表达式要更加灵活一些,它允许在WHEN子句中指定谓词或逻辑表达式,而不仅限于相等性的比较。CASE搜索表达式返回结果为TRUE的第一个WHEN逻辑表达式所关联的THEN子句中指定的值;如果没有任何WHEN表达式结果为TRUE,CASE表达式就返回ELSE子句中出现的值。
例如,以下查询根据val是否小于1000.00,在1000.00与3000.00之间,大于3000.00而生成相应的描述
SELECT orderid,custid,val, CASE WHEN val<1000.00 THEN 'Less then 1000' WHEN val BETWEEN 1000.00 AND 3000.00 THEN 'BETWEEN 1000 AND 3000' WHEN val>3000.00 THEN 'More Than 3000' ELSE 'Unknown' END AS valuescategoryFROM Sales.OrderValuesORDER BY val
该查询生成以下输出
可以看到每个CASE简单表达式都可以转换成CASE搜索表达式,但并非所有的情况都有必要使用CASE搜索表达式
- 【02单表查询】——05:CASE表达式
- SQL高级查询--case表达式
- 【02单表查询】——02:TOP
- 【02单表查询】——03:OVER子句
- sql查询语句——单表查询
- 【02单表查询】——01:各阶段查询顺序和各阶段解释
- 高级sql学习——decode函数和case表达式!!!
- case表达式
- CASE表达式
- T-SQL查询进阶--基于列的逻辑表达式(CASE)
- case查询
- SQL语句1——单表查询
- MySQL知识(九)——单表查询
- MySQL数据记录基本操作——单表查询
- 【SQL Server】数据操作语言——单表查询
- Oracle之SQL——单表查询
- MyBatis学习笔记—配置文件以及数据库单表查询
- MySQL数据记录基本操作——多表查询、子查询和正则表达式查询
- 理解Windows内核模式与用户模式
- 【按键】[独立按键] - 3:三击 以及 N击
- 关于在Android Studio中使用Assets目录下的资源的问题
- 常用端口号与对应的服务以及端口关闭
- 怎么卸载mac上的软件
- 【02单表查询】——05:CASE表达式
- LeetCode 88 Merge Sorted Array
- iOS粘滞球效果
- Hive - 内表和外表的区别
- ArrayList与数组之间的转换
- android WebView控件使用事项
- [BZOJ3282]Tree(LCT)
- BeanUtils的使用-在具有很多相同属性的两个bean之间复制属性值
- 基于MAVEN的spring的task 和qz 两种方式