在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

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

  1. 当Case表达式执行时,匹配到第一个when时,执行就结束了,后面的when条件不会再去匹配,所以要注意条件范围大小的顺序。
  2. 尽量写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表达式相关推荐

  1. 了解SQL Server CASE语句

    SQL Server CASE statement is equivalent to the IF-THEN statement in Excel. SQL Server CASE语句等效于Excel ...

  2. sql server Json表达式解析函数

    看到Json表达式, 在某些特殊情况下直接存json值.  下面取json表达式某项的值. /* 取Json表达式值 参数: @code,@json 返回: @code 对应的值 eg. @json= ...

  3. SQL server CASE WHEN

    CASE B.PARTS WHEN '外框' THEN ROUND(E.SpLength * E.pccd / 1000000, 3, 1) * B.sl WHEN '内扇' THEN ROUND(E ...

  4. 利用T-SQL动态定义重复SQL Server数据库表行

    介绍 (Introduction) Lever T-SQL to handle duplicate rows in SQL Server database tables article highlig ...

  5. 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中新的数据库对象 ...

  6. SQL server中的类似Java的三目表达式及游标使用

    运行环境:SQL server 2008R2 表达式:SELECT (CASE WHEN 1=1 THEN 'True' ELSE 'False' END) BEGINDECLARE @status ...

  7. 如何在SQL Server中实现错误处理

    错误处理概述 (Error handling overview) Error handling in SQL Server gives us control over the Transact-SQL ...

  8. mysql 算子 谓词_[SQL] SQL 基础知识梳理(六)- 函数、谓词、CASE 表达式

    SQL 基础知识梳理(六)-  函数.谓词.CASE 表达式 目录 函数 谓词 CASE 表达式 一.函数 1.函数:输入某一值得到相应输出结果的功能,输入值称为"参数",输出值称 ...

  9. cte公用表表达式_CTE SQL删除; 在SQL Server中删除具有公用表表达式的数据时的注意事项

    cte公用表表达式 In this article, the latest in our series on Common table expressions, we'll review CTE SQ ...

  10. 如何在SQL Server Reporting Services中使用表达式来创建有效的报告

    介绍 (Introduction) As many of you by now know, I am a fan of utilizing expressions within Reporting S ...

最新文章

  1. 吴恩达老师深度学习视频课笔记:深度学习的实用层面
  2. 基于Stripes框架进行Java Web开发
  3. SQL Tuning 基础概述10
  4. 面向接口编程详解(三)——模式研究
  5. 中国锂电池行业运营态势分析与投资前景研究报告2022-2028年版
  6. php动态删除输入框,jQuery实现动态添加和删除input框实例代码
  7. 如何解决光端机的开关量问题?
  8. s3c2440第一个裸奔程序——跑马灯(转)
  9. java对象转JSON JS取JSON数据
  10. java 将 ResultSet 转化为 json格式
  11. 还在使用OpenGL ES做渲染,你Out了,赶紧来拥抱Vulkan吧~
  12. 使用 Docker Machine 添加机器记录
  13. mac中的echo颜色输出
  14. 【自然语言处理】论述自然语言处理的技术范畴
  15. Windows7旗舰版SP1_32位2018.10(纯净版)
  16. CSDN-markdown编辑器的使用
  17. Unity下载文件的方式小结
  18. fiddler编程猫死活hook不到的解决办法之一
  19. 计算机应用基础19秋在线作业2答案,东师计算机应用基础19秋在线作业2题目【标准答案】...
  20. 某IOT设备漏洞分析

热门文章

  1. 小企业会计准则 ——主要账务处理和财务报表(1)
  2. python3操作win32com报错:AttributeError: Open.SaveAs 或者<COMObject Open>“, line 8, in SaveAs pywintypes.c
  3. EasySchedulerr大数据调度系统架构分析
  4. 无线上网认证之Portal认证
  5. html+css+气泡,纯CSS气泡框实现方法探究
  6. 思岚S2激光雷达2—SDK和实例程序的编译
  7. 60秒学脑科学常识:《科学美国人》专栏文集
  8. android studio必须装c盘吗,Android Studio不占用c盘配置
  9. 智慧社区解决方案_智慧社区建设方案——汇新云
  10. Survey: A Survey on Image Tampering and Its Detection in Real-world Photos 图像仿冒