• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    SQL Server Case表达式使用方式

    发布者: 浪子 | 发布时间: 2025-6-18 09:19| 查看数: 65| 评论数: 0|帖子模式

    SQL Server Case表达式

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

    1.常用Select用法

    例如:
    在人物表中对于性别列,我们可以使用数字1表示男,2表示女,0表示其他,在搜索表示数据时,使用Case表达式如下:
    1. --简单Case表达式写法
    2. SELECT Id,
    3.         Name,
    4.         Age,
    5.         CASE SEX
    6.                 WHEN '1' THEN '男'
    7.                 WHEN '2' THEN '女'
    8.                 ELSE '未知'
    9.         END AS 性别
    10. FROM dbo.Person

    11. --搜索Case表达式
    12. SELECT Id,
    13.         Name,
    14.         Age,
    15.         CASE  
    16.                 WHEN SEX= '1' THEN '男'
    17.                 WHEN SEX= '2' THEN '女'
    18.                 ELSE '未知'
    19.         END AS 性别
    20. 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. Update Score
    2.   Set Score=
    3.                   Case When Score>=90 And Score<=90 Then Score*0.9
    4.                             When Score>=80 And Score<90 Then Score*0.8
    5.                      When Score>=70 And Score<80 Then Score*0.7
    6.                      When Score>=60 And Score<70 Then Score*0.6
    7.                         Else Score
    8.                   END
    复制代码
    3.Group By 聚合函数中使用Case表达式

    针对分数表统计出学生各学科成绩,
    如下表:PersonId为学号,Subject:1为语文,2为数学,3为英语。
    1. SELECT PersonId,
    2.                 SUM(CASE WHEN Subject=1 THEN Score ELSE 0 END) AS '语文',
    3.                 SUM(CASE WHEN Subject=2 THEN Score ELSE 0 END) AS '数学',
    4.                 SUM(CASE WHEN Subject=3 THEN Score ELSE 0 END) AS '英语'
    5.         From Score
    6. Group By PersonId
    复制代码
    实现结果:


    总结

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

    来源:https://www.jb51.net/database/332983g7t.htm
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    ×

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表