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.9When Score>=80 And Score<90 Then Score*0.8When Score>=70 And Score<80 Then Score*0.7When Score>=60 And Score<70 Then Score*0.6Else ScoreEND
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 ScoreGroup By PersonId
实现结果:
SQL Server Case表达式相关推荐
- 了解SQL Server CASE语句
SQL Server CASE statement is equivalent to the IF-THEN statement in Excel. SQL Server CASE语句等效于Excel ...
- sql server Json表达式解析函数
看到Json表达式, 在某些特殊情况下直接存json值. 下面取json表达式某项的值. /* 取Json表达式值 参数: @code,@json 返回: @code 对应的值 eg. @json= ...
- SQL server CASE WHEN
CASE B.PARTS WHEN '外框' THEN ROUND(E.SpLength * E.pccd / 1000000, 3, 1) * B.sl WHEN '内扇' THEN ROUND(E ...
- 利用T-SQL动态定义重复SQL Server数据库表行
介绍 (Introduction) Lever T-SQL to handle duplicate rows in SQL Server database tables article highlig ...
- Oracle 9i与MS SQL Server 2000之比较连载五.zz
http://kb.cnblogs.com/a/1153156 Oracle 9i与MS SQL Server 2000之比较连载五 2008-04-14 18:13 四.Oracle中新的数据库对象 ...
- SQL server中的类似Java的三目表达式及游标使用
运行环境:SQL server 2008R2 表达式:SELECT (CASE WHEN 1=1 THEN 'True' ELSE 'False' END) BEGINDECLARE @status ...
- 如何在SQL Server中实现错误处理
错误处理概述 (Error handling overview) Error handling in SQL Server gives us control over the Transact-SQL ...
- mysql 算子 谓词_[SQL] SQL 基础知识梳理(六)- 函数、谓词、CASE 表达式
SQL 基础知识梳理(六)- 函数.谓词.CASE 表达式 目录 函数 谓词 CASE 表达式 一.函数 1.函数:输入某一值得到相应输出结果的功能,输入值称为"参数",输出值称 ...
- cte公用表表达式_CTE SQL删除; 在SQL Server中删除具有公用表表达式的数据时的注意事项
cte公用表表达式 In this article, the latest in our series on Common table expressions, we'll review CTE SQ ...
- 如何在SQL Server Reporting Services中使用表达式来创建有效的报告
介绍 (Introduction) As many of you by now know, I am a fan of utilizing expressions within Reporting S ...
最新文章
- 吴恩达老师深度学习视频课笔记:深度学习的实用层面
- 基于Stripes框架进行Java Web开发
- SQL Tuning 基础概述10
- 面向接口编程详解(三)——模式研究
- 中国锂电池行业运营态势分析与投资前景研究报告2022-2028年版
- php动态删除输入框,jQuery实现动态添加和删除input框实例代码
- 如何解决光端机的开关量问题?
- s3c2440第一个裸奔程序——跑马灯(转)
- java对象转JSON JS取JSON数据
- java 将 ResultSet 转化为 json格式
- 还在使用OpenGL ES做渲染,你Out了,赶紧来拥抱Vulkan吧~
- 使用 Docker Machine 添加机器记录
- mac中的echo颜色输出
- 【自然语言处理】论述自然语言处理的技术范畴
- Windows7旗舰版SP1_32位2018.10(纯净版)
- CSDN-markdown编辑器的使用
- Unity下载文件的方式小结
- fiddler编程猫死活hook不到的解决办法之一
- 计算机应用基础19秋在线作业2答案,东师计算机应用基础19秋在线作业2题目【标准答案】...
- 某IOT设备漏洞分析
热门文章
- 小企业会计准则 ——主要账务处理和财务报表(1)
- python3操作win32com报错:AttributeError: Open.SaveAs 或者<COMObject Open>“, line 8, in SaveAs pywintypes.c
- EasySchedulerr大数据调度系统架构分析
- 无线上网认证之Portal认证
- html+css+气泡,纯CSS气泡框实现方法探究
- 思岚S2激光雷达2—SDK和实例程序的编译
- 60秒学脑科学常识:《科学美国人》专栏文集
- android studio必须装c盘吗,Android Studio不占用c盘配置
- 智慧社区解决方案_智慧社区建设方案——汇新云
- Survey: A Survey on Image Tampering and Its Detection in Real-world Photos 图像仿冒