CASE简介

来源:互联网 发布:编程语言选择 编辑:程序博客网 时间:2024/06/15 14:43


CASE简介

  基于列的逻辑表达式,其实就是CASE表达式.可以用在SELECT,UPDATE,DELETE,SET以及IN,WHERE,ORDER BY和HAVING子句之后。由于这里讲的是T-SQL查询,所以只说到CASE表达式在SELECT子句和ORDER BY子句中的使用。

  CASE表达式的作用与编程语言中的IF…THEN…ELSE逻辑类似。只是CASE表达式在T-SQL中并不能控制T-SQL程序的流程,只是作为基于列的逻辑使用。

  一个简单的示例,假设有这样一张表:

  

  在查询的时候,对于列Sex,如果是False就显示男,如果是True就显示女。

  语句如下:

复制代码
  SELECT Id,Name,      CASE Sex       WHEN 0 THEN ''      WHEN 1 THEN ''       ELSE '不清楚'       END AS 性别  FROM PERSON
复制代码

  显示结果如下:

  

       CASE表达式实际情况可以分为两种:

  •        CASE简单表达式(CASE Simple Expression):将某个表达式与一组简单表达式进行比较以确定结果。
  •        CASE 搜索表达式(CASE Searched Expression):计算一组布尔表达式以确定结果。

  下面分别介绍这两种方式。

CASE简单表达式

  在CASE简单表达式中,整个表达式只会取一列的值做相应的判断。就如同上面的例子一样,现在只给出另外一种等价的写法。

复制代码
SELECT Id,Name,    性别 = CASE Sex     --区别仅仅是将别名放到这里而已    WHEN 0 THEN ''    WHEN 1 THEN ''     ELSE '不清楚'     ENDFROM PERSON
复制代码

  因为CASE表达式的值只局限在一列当中,所以THEN后面的值数据类型必须相同,或者兼容,否则就会报错。

  在上面语句中,还有一个可选的“ELSE”语句,这个语句可以省略,但最好的做法是保留ELSE,否则不在匹配值范围内的所有值都会为“NULL”。

CASE搜索表达式

   与CASE简单表达式不同,CASE搜索表达式提供了更强大的功能,CASE搜索表达式不仅可以使用更复杂的逻辑表达式,而且还能够根据多个列的数据确定所显示列的值。

 

  那么如何根据列来确定显示值呢,且看下面例子:

复制代码
SELECT Id,Name,    性别 = CASE            --注意这里的CASE后面不跟任何东西了    WHEN Sex=0 THEN '帅哥'      --当然Sex你可以换成任意其他列    WHEN Sex=1 THEN '美女'    ELSE '不清楚'     ENDFROM PERSON
复制代码

  显示结果如下:

  

  现在来做一个根据多个列判断显示的例子,在原来的表上添加两条记录

  

  多个列组合判断:

  现在要根据Id和Sex两个列来组合判断帅哥,美女的SQL如下:

复制代码
SELECT Id,Name,    CASE    WHEN Id = 3 AND Sex = 0 THEN '帅哥'  --这里要注意顺序,优先显示前面匹配到的,这个后面会提到    WHEN Id = 4 And Sex = 1 THEN '美女'     WHEN Sex = 0 THEN ''    WHEN Sex = 1 THEN ''    ELSE '不清楚'    END AS 性别FROM Person
复制代码

  显示结果如下:

  

  范围判断:

  再新建一个表如下所示:

  

  这里要实现的效果是,当分数大于90,显示优秀,大于80,显示良好...

  SQL语句如下:

复制代码
  SELECT Id,Name,  CASE   WHEN Score > 90 THEN '优秀'  WHEN Score > 80 THEN '良好'  WHEN Score > 70 THEN '中等'  WHEN Score > 60 THEN '及格'  ELSE '不及格'  END AS 分数  FROM Score
复制代码

  查询结果如下:

  

  这里要注意WHEN…THEN是以先后顺序出现,当第一个WHEN后面的表达式为FALSE时,则会去看第二个WHEN后的表达式,依次类推。当第一个WHEN后的表达式为TRUE时,则取第一个THEN后面的值,即使第二个WHEN表达式也为TRUE。所以这里为什么刘备分数满足前面几个条件,也显示第一个结果。

CASE表达式在ORDER BY中的使用

  CASE表达式在ORDER BY中可以将排序结果分类,可以使符合一定条件则升序,符合另外一定条件则降序,但总体差不多,下面给个例子。

  还是刚才那张表,我想,当性别为男则Id降序排序,如果性别为女则Id升序排序。SQL语句如下:

  SELECT Id,Name,Sex  FROM Person  ORDER BY       CASE WHEN Sex=0 THEN Id END DESC,    --性别为男,Id降序      CASE WHEN Sex=1 THEN Id END ASC      --性别为女,Id升序

  显示结果如下:

  

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 发现计算上的错误怎么办 孩子不好好做作业怎么办 手破了红肿了怎么办呢 老师反应孩子在校粗心胆小怎么办 四年级的学生计算粗心怎么办 老打孩子骂孩子怎么办 站久了脚肿了怎么办 孩子初中了书写越来越潦草怎么办 给孩子自由孩子无法无天怎么办 孩子挑食幼儿园老师该怎么办 老师说孩子挑食家长怎么办 工作中老是粗心不细心怎么办 小孩数学总是特别粗心该怎么办 孩子起范疙瘩的怎么办 做题马虎不认真怎么办 孩子考差了家长怎么办 小孩写作业不认真怎么办 小孩不认真检查作业怎么办 一年级的小孩作业不认真怎么办 一年级学生做题粗心怎么办 一年级的学生做题粗心怎么办 孩子做作业注意力不集中怎么办 小学三年孩子抄答案怎么办 孩子写作业不认真审题怎么办 一年级小孩审题不认真怎么办 孩子审题不认真马虎怎么办 孩子做作业不认真审题怎么办? 考老师考砸了怎么办 重要考试考砸了怎么办 二年级孩子做数学题粗心怎么办 二年级孩子考试粗心怎么办 二年级孩子考试总是粗心怎么办 二年级孩子总是粗心怎么办 小学一年级孩子抄别人作业怎么办 被老师发现抄答案怎么办 考试抄答案被老师发现怎么办 孩子撒谎不写作业怎么办 小学生做题容易马虎出错怎么办 小学生做题老是马虎怎么办 小学生做题马虎不认真怎么办 会做的题总做错怎么办