SQL Server case表达式的用法

 

CASE表达式是一个标量表达式,它基于条件逻辑来返回一个值。因为CASE是一个标量表达式,所以它可以应用在SELECT、WHERE、HAVING以及ORDER BY子句中。

    CASE表达式有两种格式:简单表达式和搜索表达式。

 

  1. 利用case做简单的表达式:

CASE简单表达式将一个值(或一个标量表达式)与一组可能的取值进行比较,并返回第一个匹配的结果。如果列表中没有值等于测试值,CASE表达式就返回其ELSE子句(如果存在)中列出的值。如果CASE表达式中没有ELSE子句,则默认将其视为ELSE NULL。

(1)按照性别:

SELECT ID ,
       StudentName ,
       Age ,
       DepartmentID ,
       ClassID ,
       Sex ,
       CASE Sex                                【搜索:CASE】
          WHEN  1 THEN 'BOY'            【搜索:WHEN Sex!=1 THEN  'GIRL‘】
ELSE 'GIRL'                                    【搜索:   ELSE 'BOY'】
      END AS SEX
      FROM T_Student ;

  结果如下:

简单表达式:

(2)按照班级编号:

SELECT ID ,
       Sex ,
       Age ,
       DepartmentID ,
       ClassID ,
       CASE ClassID
          WHEN 1 THEN 'CLASS1'
          WHEN 2 THEN 'CLASS3'
          WHEN 3 THEN 'CLASS3'
          WHEN 4 THEN 'CLASS4'
          WHEN 5 THEN 'CLASS5'
          WHEN 6 THEN 'CLASS6'
               ELSE 'TNE_END'
      END AS CLASS

   FROM T_Student ;

结果为:

2.利用case做搜索的表达式:

CASE简单表达式只有一个测试值(或表达式),它紧跟在CASE关键字后面,与WHEN子句中的一组可能值进行比较。CASE搜索表达式要更灵活些,它可以在WHERE子句中指定逻辑表达式,而不限于只进行相等性的比较。CASE搜索表达式返回结果为TRUE的第一个WHEN逻辑表达式所关联的THEN子句中指定的值。如果没有任何WHEN表达式结果为TRUE,CASE表达式就返回ELSE子句中出现的值(如果没有指定ELSE子句,则返回NULL)。

★【每个CASE简单表达式都可以转换为CASE搜索表达式-(1),但不是所有的CASE搜索表达式都可以转换为CASE简单表达式-(2)】。

(1):按照ClassID的值

SELECT ID ,
       Sex ,
       Age ,
       DepartmentID ,
       ClassID ,
       StudentName ,
       CASE 
          WHEN ClassID=1 THEN 'CLASS1'
          WHEN ClassID=2 THEN 'CLASS3'
          WHEN ClassID=3 THEN 'CLASS3'
          WHEN ClassID=4 THEN 'CLASS4'
          WHEN ClassID=5 THEN 'CLASS5'
          WHEN ClassID=6 THEN 'CLASS6'
          
      ELSE 'TNE_END'
      END AS CLASS
FROM T_Student ;

结果如下:

 (2):按照ID的范围:

SELECT Sex ,
       DepartmentID ,
       ClassID ,
       StudentName ,
       ID ,
       CASE 
          WHEN ID>=1 AND ID <=6 THEN 'CLASS1'【不限于只进行相等性的比较】
          WHEN ID>=2 AND ID <=13 THEN 'CLASS2'
 WHEN ID>=14 AND ID <=19 THEN 'CLASS3'
          WHEN ID>20 AND ID <=25 THEN 'CLASS4'
          WHEN ID>=21 AND ID <=32 THEN 'CLASS5'
          WHEN ID>=33 AND ID <= 38 THEN 'CLASS6'
          ELSE 'CLASS7'
      END AS CLASS
FROM T_Student ;

结果如下:

3.CASE用在其它地方:

(1)函数中:

SELECT 
               StudentName ,
               ID ,
               SUM( CASE WHEN SEX = '1' THEN
                       ID ELSE 0 END ),
                       
               SUM( CASE WHEN Sex = '0' THEN
                       ID ELSE 0 END )
FROM T_Student 
GROUP BY ID ,
                   StudentName ;

(2):CASE用在where中:

SELECT 
      *
      FROM EMP M
      WHERE (CASE    WHEN M.SAL>1000 AND 1=1 THEN 1
                     WHEN M.SAL<1000 AND 1=2 THEN 1
                     WHEN M.SAL>3000 AND 1=3 THEN 1
                     ELSE 0
                     END)=1
     

这些只是在学习中老师没有将之前让我们自己先掌握的,自己就只是简单的做了一些预习吧,里面还是有很多不太符合逻辑的语法,希望指正~~

转载于:https://www.cnblogs.com/haixiaomei/p/20150826Sea.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值