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

1Case函数《/a>的用法

   (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)如图:我们写出下面执行的代码《/a>,数据库大家自己建或者我在下面附加脚本了,大家制药执行一下即可:

       

    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('0002','数学',79)
16 
17       insert into Score values('0003','英语',95)
18 
19       insert into Score values('0004','语文',69)
20 
21       insert into Score values('0005','数学',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 学号

本文转自:http://www.hello-code.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值