SQL Server Case表达式使用方式

 更新时间:2024年12月25日 08:41:09   作者:-小龙人  
在SQL Server中,Case表达式可以用于条件分支,包括在Select、Update和GroupBy中使用,可以优化SQL语句,提高效率

SQL Server Case表达式

在SQL Server中,在处理条件分支时,使用Case表达式十分便利,对于Case的表达基本用法很简单,但它还有一些我们意想不到的写法,可以为我们的SQL优化,起到事半功倍的效果。 

1.常用Select用法 

例如:

在人物表中对于性别列,我们可以使用数字1表示男,2表示女,0表示其他,在搜索表示数据时,使用Case表达式如下:

--简单Case表达式写法
SELECT Id,
	Name,
	Age,
	CASE SEX 
		WHEN '1' THEN '男'
		WHEN '2' THEN '女'
		ELSE '未知' 
	END AS 性别
 FROM dbo.Person

--搜索Case表达式
SELECT Id,
	Name,
	Age,
	CASE  
		WHEN SEX= '1' THEN '男'
		WHEN SEX= '2' THEN '女'
		ELSE '未知' 
	END AS 性别
FROM dbo.Person

这里的两种写法,简单表达式和搜索表达式效果是一样的,可以根据自己喜好写。 

注意事项:

当Case表达式执行时,匹配到第一个when时,执行就结束了,后面的when条件不会再去匹配,所以要注意条件范围大小的顺序。尽量写else条件,否则显示的数据可能是你意料之外的。

2.Update中使用Case表达式

当需要更新某个字段需要面对多种情况时,一般由对最底层的条件依次往上多次去更新,这样很容易出现事故,使用Case 表达式可以一次更新。 

例如:

针对一张分数表,分数在 [60-70) 内分数 * 0.6,分数在 [70-80) 内分数 * 0.7,分数在 [80-90) 内分数 * 0.8,分数在 [90-100] 内分数 * 0.9。

分数表如下:

如果按条件一步步去更新,这里一定不能先去更新[90-100]分数段的成绩,因为这个分数段的成绩更新后成绩在[81-90]范围内,会被后面的更新再次更新,所以只能从最底层条件[60-70)条件往上依次多次去更新。

如果使用Case表达式可以一次更新所有情况

Update Score 
  Set Score= 
  		Case When Score>=90 And Score<=90 Then Score*0.9
		   	 When Score>=80 And Score<90 Then Score*0.8
		     When Score>=70 And Score<80 Then Score*0.7
		     When Score>=60 And Score<70 Then Score*0.6
			Else Score
  		END

3.Group By 聚合函数中使用Case表达式

针对分数表统计出学生各学科成绩,

如下表:PersonId为学号,Subject:1为语文,2为数学,3为英语。

 SELECT PersonId,
		SUM(CASE WHEN Subject=1 THEN Score ELSE 0 END) AS '语文',
		SUM(CASE WHEN Subject=2 THEN Score ELSE 0 END) AS '数学',
		SUM(CASE WHEN Subject=3 THEN Score ELSE 0 END) AS '英语'
	From Score
 Group By PersonId

实现结果:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 用SQL脚本读取Excel中的sheet数量及名称的方法代码

    用SQL脚本读取Excel中的sheet数量及名称的方法代码

    这篇文章介绍了用SQL脚本读取Excel中的sheet数量及名称的方法代码,有需要的朋友可以参考一下
    2013-09-09
  • SQL 查询语句之select语句举例

    SQL 查询语句之select语句举例

    文章介绍了SQL中SELECT语句的基础作用,用于从数据库表中查询数据,是数据库操作的核心,涵盖查询单/多列、所有列、去重、分页及注释等基本语法,强调其在数据提取和复杂查询构建中的重要性,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2025-09-09
  • 数据库表的创建、管理和数据操作(实验一)

    数据库表的创建、管理和数据操作(实验一)

    这篇文章主要介绍了数据库中表的创建、管理和数据操作,感兴趣的小伙伴可以参考一下
    2015-08-08
  • SQLSERVER数据库备份后无法还原的解决办法

    SQLSERVER数据库备份后无法还原的解决办法

    有时候为了考虑数据安全我们都会备份数据库,sqlserver的备份格式一般都是bak结尾的,但覆盖时容易出问题,这里简单介绍下,需要的朋友可以参考下
    2013-08-08
  • SQL Server空闲连接查询对比与分析

    SQL Server空闲连接查询对比与分析

    在 SQL Server 中,释放空连接(也称为空闲连接)是一个重要的操作,特别是在高并发环境中,以确保数据库资源得到有效利用并避免连接泄漏,故本文介绍了SQL Server 空闲连接查询对比与分析,需要的朋友可以参考下
    2024-08-08
  • MS SQL Server获取十二个月份的英文缩写

    MS SQL Server获取十二个月份的英文缩写

    十二个月份的英文缩写,只有五月份是全称与缩写一样,其它月份的缩写仅是取前三位字母。因此Insus.NET写成一个自定义函数获取月份名称缩写,感兴趣的朋友可以了解下
    2013-01-01
  • sqlserver 临时表的用法

    sqlserver 临时表的用法

    用于复杂查询时可以用临时表来暂存相关记录,能够提高效率、提高程序的可读性,类似于游标中的my_cursor declare my_cursor cursor scroll
    2010-11-11
  • SQL Server的死锁说明

    SQL Server的死锁说明

    死锁是导致数据库中的竞争性并发锁,通常在多步骤事务中。当两个或多个任务永久相互阻止时,每个任务都锁定了其他任务尝试锁定的资源,就会发生死锁。本文主要介绍了SQL Server的死锁,感兴趣的朋友可以参考阅读
    2023-04-04
  • sql不常用函数总结以及事务,增加,删除触发器

    sql不常用函数总结以及事务,增加,删除触发器

    sql不常用函数总结以及事务,增加,删除触发器,需要的朋友可以参考下
    2012-06-06
  • 利用ROW_NUMBER() OVER函数给SQL数据库中每一条记录分配行号的方法

    利用ROW_NUMBER() OVER函数给SQL数据库中每一条记录分配行号的方法

    这篇文章主要介绍了利用ROW_NUMBER() OVER函数给SQL数据库中每一条记录分配行号的方法,需要的朋友可以参考下
    2015-10-10

最新评论