SQL Server Case表达式使用方式

SQL Server Case表达式

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

1.常用Select用法 

例如:

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
--简单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表达式可以一次更新所有情况

1
2
3
Update Score
  Set Score=
        Case When Score>=90 And Score=80 And Score=70 And Score=60 And Score

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

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

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

1
2
3
4
5
6
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

实现结果:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持IT俱乐部。

本文收集自网络,不代表IT俱乐部立场,转载请注明出处。https://www.2it.club/database/mssql/14911.html
上一篇
下一篇
联系我们

联系我们

在线咨询: QQ交谈

邮箱: 1120393934@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部