zoukankan      html  css  js  c++  java
  • 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
    

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

    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.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
    

    实现结果:
    在这里插入图片描述

  • 相关阅读:
    各大互联网公司架构演进之路汇总
    Java工程师成神之路~(2018修订版)
    Java的并发编程中的多线程问题到底是怎么回事儿?
    深入理解多线程(五)—— Java虚拟机的锁优化技术
    Java中线程池,你真的会用吗?
    深入理解多线程(四)—— Moniter的实现原理
    深入理解多线程(三)—— Java的对象头
    深入理解多线程(二)—— Java的对象模型
    深入理解多线程(一)——Synchronized的实现原理
    css
  • 原文地址:https://www.cnblogs.com/wangqilong/p/12540344.html
Copyright © 2011-2022 走看看