一:case表达式的用法

1、SQL中的case表达式的作用是用来对“某个变量”进行某种转化,通常在select字句中使用,举个例子:

不能看出,case表达式很像我们的if else的作用,在发现为真的 WHEN 子句时,CASE 表达式的真假值判断就会中止,而剩余的 WHEN 子句会被忽略。case表达式有两种写法:

-- 简单CASE 表达式

CASE sex
   WHEN '1' THEN '男'
   WHEN '2' THEN '女'

ELSE '其他' END

-- 搜索CASE 表达式

CASE WHEN sex = '1' THEN '男'
      WHEN sex = '2' THEN '女'

ELSE '其他' END

注意点:

* else这句非必须但最好带上,如果when中没有符合条件的,且有没有else控制,那么,这样的case会返回null,null不是个好东西,所以你一定要尽量控制减少返回null的情况。

* 简单点说,在能写列名和常量的地方,通常都可以写 CASE 表达式,因为它返回的是一个标量值。

2、使用case实现不同条件的统计:

还是上一个学生表,如果让你查询出各个省份的男生总数和女生总数你会怎么搞呢?

我反正稍加思考,可以想到这样写:

--查看所有学生信息
select StudentID,[Name],Province,Gender,(case Gender
when 0 then N'女'
when 1 then N'男'
else '' end) StuGender
from dbo.T_Student --查询出各省的男女生总数:
select p.Province,sum(p.MaleCount) TotalMale,sum(p.FamaleCount) TotalFamale
from (
select Province, count(1) MaleCount,0 as FamaleCount
from dbo.T_Student
where gender=1
group by Province
union
select Province, 0,count(1) FamaleCount
from dbo.T_Student
where gender=0
group by Province
)as p
group by p.Province

对应的执行结果:

so,可以看到,能实现功能,但是代码却那么长,看着不舒服,这时咱们看看如何用case来拯救世界吧:

--查看所有学生信息
select StudentID,[Name],Province,Gender,(case Gender
when 0 then N'女'
when 1 then N'男'
else '' end) StuGender
from dbo.T_Student --查询出各省的男女生总数:
select Province,
sum(case when Gender=1 then 1 else 0 end ) as MaleCount,
sum(case when Gender=0 then 1 else 0 end ) as FeMaleCount
from dbo.T_Student
group by Province

执行结果:

so,仅仅5行就搞定了,差别很明显,新手where,高手case,good。

3、在update操作中使用case条件分支,比如有个员工表Salaries,工资字段为salary ,

假设现在需要根据以下条件对该表的数据进行更新。

  1. 对当前工资为 30 万日元以上的员工,降薪 10%。

  2. 对当前工资为 25 万日元以上且不满 28 万日元的员工,加薪 20%。

那么更新的SQL语句可以这样写:

-- 用CASE 表达式写正确的更新操作
UPDATE Salaries
SET salary = CASE WHEN salary >= 300000
THEN salary * 0.9
WHEN salary >= 250000 AND salary < 280000
THEN salary * 1.2
ELSE salary END;

** 参考:图灵社区的《SQL进价教程》一书。

SQL进阶1:case表达式的用法示例的更多相关文章

  1. SQL进阶随笔--case用法(一)

    SQL进阶一整个是根据我看了pdf版本的整理以及自己的见解整理.后期也方便我自己查看和复习. CASE 表达式 CASE 表达式是从 SQL-92 标准开始被引入的.可能因为它是相对较新的技术,所以尽 ...

  2. SQL进阶随笔--case用法(二)

    ---恢复内容开始--- 用 CHECK 约束定义多个列的条件关系 今天来说下check和case的用法.其实,CASE 表达式和 CHECK 约束是很般配的一对组合.也许有很多数据库工程师不怎么用 ...

  3. SQL Server case表达式的用法

    ★CASE表达式是一个标量表达式,它基于条件逻辑来返回一个值.因为CASE是一个标量表达式,所以它可以应用在SELECT.WHERE.HAVING以及ORDER BY子句中. CASE表达式有两种格式 ...

  4. SQL:select case when 的用法

    CASE 可能是 SQL 中被误用最多的关键字之一.虽然你可能以前用过这个关键字来创建字段,但是它还具有更多用法.例如,你可以在 WHERE 子句中使用 CASE. 首先让我们看一下 CASE 的语法 ...

  5. 走向面试之数据库基础:二、SQL进阶之case、子查询、分页、join与视图

    一.CASE的两种用法 1.1 等值判断->相当于switch case (1)具体用法模板: CASE expression WHEN value1 THEN returnvalue1 WHE ...

  6. 转-sql中的case when的用法

    Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END ...

  7. sql server中case when的用法

    Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END ...

  8. [转帖]SQL 里面的 case when 的用法

    SQL之case when then else end用法介绍 https://www.2cto.com/database/201804/740772.html 要培训了 看到有case when 之 ...

  9. Oracle的sql语句中case关键字的用法 & 单双引号的使用

    关于sql中单引号和双引号的使用,来一点说明: 1. 查询列的别名如果含有汉字或者特殊字符(如以'_'开头),需要用双引号引起来.而且只能用双引号,单引号是不可以的. 2. 如果想让某列返回固定的值, ...

随机推荐

  1. Codeforces Round #524 (Div. 2)

    A. Petya and Origamitime limit per test1 secondmemory limit per test256 megabytesinputstandard input ...

  2. File类中的一些属性 添加删除文件夹

    import java.io.File; import java.io.IOException; public class FileD { public static void main(String ...

  3. Hadoop wordcount Demon

    搭建完成Hadoop后,第一个demon,wordcount.此处参考:http://blog.csdn.net/wangjia55/article/details/53160679 wordcoun ...

  4. 源码包安装apache

    含有的命令:cd,wget,tar,cd,yum,./configure,make,make install,vim ===安装apache=== [root@ycj ~]# cd /usr/src/ ...

  5. [转]BT原理分析

    BitTorrent协议. BT全名为BitTorrent,是一个p2p软件,你在下载download的同时,也在为其他用户提供上传upload,因为大家是“互相帮助”,所以不会随着用户数的增加而降低 ...

  6. LeetCode 50 - Pow(x, n) - [快速幂]

    实现 pow(x, n) ,即计算 x 的 n 次幂函数. 示例 1: 输入: 2.00000, 10输出: 1024.00000 示例 2: 输入: 2.10000, 3输出: 9.26100 示例 ...

  7. XP下ubuntu双系统安装方法

    利用u盘将iso刻录 从u盘启动 连续按alt+f2 进入ubuntu试用 打开终端 输入 sudo umount -l /cdrom sudo umount -l /isodevice 然后安装un ...

  8. PHP 二维数组根据某个字段按指定排序方式排序

    /** * 二维数组根据某个字段按指定排序方式排序 * @param $arr array 二维数组 * @param $field string 指定字段 * @param int $sort_or ...

  9. Fiddler死活抓不了HTTPS包解决办法

    Fiddler抓取HTTPS设置注意以下操作的前提是,手机已经能够连上Fiddler,这部分的配置过程简单就不赘述了,可参考:手机如何连接Fiddler . 如何继续配置让Fiddler抓取到HTTP ...

  10. idea右键没有svn选项

    然后apply,当然也可以只是某些指定的文件夹.project就是当前项目,包括所有的module.