我是一个菜鸟,我只是在努力,2021正视自己,面对2021!

SQL Server高级内容之case语法函数

1Case函数的用法

   (1)使用类似:switch-case与if-else if。

   (2)语法:

    case [字段]

      when 表达式 then 显示数据

      when 表达式 then 显示数据

      else 显示数据

    end

   (3)百分制转换素质教育

     1)如图:我们要将显示的数据转换成ABCDE,规则是90分以上显示A80分以上显示B,以此类推。

     

    2)执行的SQL语句是:

复制代码
 1       Select ID,TestBase,
 2 
 3       Case 
 4 
 5          When testBase>=90 then ‘A’
 6 
 7               When testBase>=80 then ‘B’
 8 
 9          When testBase>=70 then ‘C’
10 
11          When testBase>=60 then ‘D’
12 
13          Else ‘E’ end as testBaseLevel,
14 
15     testBeyond,testDate from Score
复制代码

    3)最后的执行结果如图所示:

     

   (4)注意:

      1)case对应的就写上end

      2)end后面跟别名(case与end之间相当于一个字段(对象))

   (5)和C#switch-语法作比较

    1)C# 

      Switch(变量)

      {

        Case 常量1:结果1;break;

        Case 常量2:结果2;break;

        Default :默认结果;break;
      }

    2) SQL

      SQL语法我在上面写了,可以对比看一下。

  (6)对应的if-else if语法

    1) C#

      If(表达式1) {结果1;}

      else if(表达式2) {结果2}

      else {默认结果;}

    2)SQL Server

      case

        when 表达式1 then 显示1

        when 表达式2 then 显示2

        else 默认显示

      end

    3)举例说明,如果我们存放性别的时候在数据库中是用f,m标识的,现在我们想要用男女标识,SQL语句如下:

复制代码
 1        Select ID,Name,stuSex,
 2 
 3         case
 4 
 5           when stuSex=’m’ then ‘男’
 6 
 7           when syuSex=’f’ then ‘女’
 8 
 9           else ‘其它’
10 
11         end as stuSexType,
12 
13       stuDate from Student。
复制代码

   (7)练习案例:

    1)在数据库中执行这段代码: 

复制代码
 1       use Test
 2 
 3       go
 4 
 5       create table PracticeTest
 6 
 7       (
 8 
 9         number varchar(10),
10 
11         amount int
12 
13       )
14 
15       insert into PracticeTest(number,amount) values('RK1',10)
16 
17       insert into PracticeTest(number,amount) values('RK2',20)
18 
19       insert into PracticeTest(number,amount) values('RK3',-30)
20 
21       insert into PracticeTest(number,amount) values('RK4',-10)
复制代码

    2)实现的效果如下:

     

    3)可以看出,首先select中应该有三个字段,并且将数据大于0的放到收入中,那么另一个为0,并且将小于0的放到支出里面,另一个为0,下面我们写实现的SQL语句:   

复制代码
 1        select number as 单号,
 2 
 3         case 
 4 
 5           when amount>0 then amount
 6 
 7           else 0
 8 
 9         end as 收入,
10 
11         case
12 
13           when amount<0 then -amount
14 
15           else 0 
16 
17         end as 支出
18 
19       from PracticeTest
复制代码

   (8)一道面试题的练习:

    1)如图:我们写出下面执行的代码,数据库大家自己建或者我在下面附加脚本了,大家制药执行一下即可:

       

    2)执行的SQL语句:

复制代码
 1           create table Score
 2 
 3       (
 4 
 5         学号 nvarchar(10),
 6 
 7         课程 nvarchar(10),
 8 
 9         成绩 int
10 
11       )
12 
13       insert into Score values('0001','语文',87)
14 
15       insert into Score values('0001','数学',79)
16 
17       insert into Score values('0001','英语',95)
18 
19       insert into Score values('0002','语文',69)
20 
21       insert into Score values('0002','数学',84)
复制代码

    3)实现功能的SQL语句的书写

复制代码
 1         select 学号,sum(
 2 
 3         case 
 4 
 5           when 课程='语文' then 成绩
 6 
 7           else 0
 8 
 9         end) as 语文,sum(
10 
11         case 
12 
13           when 课程='数学' then 成绩
14 
15           else 0
16 
17         end) as 数学,sum(
18 
19         case
20 
21           when 课程='英语' then 成绩
22 
23           else 0
24 
25         end) as 英语
26 
27       from score  group by 学号
复制代码

 

        相信自己,你就是下一个奇迹!

posted @   Kencery  阅读(19879)  评论(5编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
友情链接:初心商城
点击右上角即可分享
微信分享提示