SQL CASE 的用法

简介:
  1. --简单case函数

    case sex

      when '1' then '男'

      when '2' then '女’

      else '其他' end


    --case搜索函数

    case when sex = '1' then '男'

       when sex = '2' then '女'

       else '其他' end  



这两种方式,可以实现相同的功能。简单case函数的写法相对比较简洁,但是和case搜索函数相比,功能方面会有些限制,比如写判定式。

还有一个需要注重的问题,case函数只返回第一个符合条件的值,剩下的case部分将会被自动忽略。

比如说,下面这段sql,你永远无法得到“第二类”这个结果:


case when col_1 in ('a','b') then '第一类'
   when col_1 in ('a') then '第二类'
   else '其他' end  

-------------------------------------------------------------------------------------------------------------------


2.批量更新数据

--假设状态只有3个选项,把所有FStatus=3的更新为1,FStatus=88的更新为5,FStatus=99的更新为9,

update T_SUF_Barcode set FStatus=(case FStatus

                     when '3' then '1' 

 when '88' then '55'

 else FStatus  end) 

 where   FBarcode  between '180121702150001' and '180121702153000'

----------------------------------------------------------------------------------------------------------------


3.将条码表中的状态用中文表示


select fstatus from T_SUF_Barcode t1   where   FBarcode  between '180121702150001' and '180121702153000'

--------------------------------------------------------------------------------------------------------------------

fstatus

1

...

5

...

5

9

...

---------------------------------------------------------------------------------------------------------------------


select t1.FBarcode, (case t1.FStatus

                   when  1 then '正常'

                   when  5 then '未知'

                   when  9 then '作废' end)状态

 from T_SUF_Barcode t1

 where   FBarcode  between '180121702150001' and '180121702153000'


FBarcode状态

180121702150001正常

180121702150002...

180121702150003 未知

180121702150004...

180121702150011作废

180121702150012...




4.将sum与case结合使用,可以实现分段统计。
     如果现在希望将上表中各种状态的条码进行统计,sql语句如下:


select

   sum(case t1.FStatus when 1 then 1  end)正常,

   sum(case t1.FStatus when 5 then 2  end)未知,

   sum(case  when t1.FStatus !=1 and t1.FStatus!=5 then 1  end)作废

from T_SUF_Barcode t1  where   FBarcode  between '180121702150001' and '180121702153000'


--sum求和,当为5时,更新为2,并求和符合条件的2。这里正常,未知,作废符合条件的各有1000个数据。


正常 未知          作废

1000 2000(1000*2)   1000


               --------------------------------------------

   

select

   count(case t1.FStatus when 1 then 1  end)正常,

   count(case t1.FStatus when 5 then 1  end)未知,

   count(case  when t1.FStatus !=1 and t1.FStatus!=5 then 1  end)作废

from T_SUF_Barcode t1  where   FBarcode  between '180121702150001' and '180121702153000'


--统计符合条件的个数。


正常 未知 作废

1000 1000 1000







      本文转自笔下生辉  51CTO博客,原文链接:http://blog.51cto.com/752030200/1953196,如需转载请自行联系原作者


相关文章
|
3月前
|
SQL 分布式计算 DataWorks
DataWorks产品使用合集之如何在SQL语句里使用CASE WHEN语句
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
4月前
|
SQL Java 数据库连接
SQL SELECT语句的基本用法
SQL SELECT语句的基本用法
|
2月前
|
SQL XML Java
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
文章介绍了MyBatis中动态SQL的用法,包括if、choose、where、set和trim标签,以及foreach标签的详细使用。通过实际代码示例,展示了如何根据条件动态构建查询、更新和批量插入操作的SQL语句。
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
|
2月前
|
SQL 存储 安全
SQL Server用法
SQL Server用法
71 1
|
2月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
44 1
|
2月前
|
SQL
SQL: 巧妙使用CASE WHEN实现查询
文章演示了如何利用SQL中的CASE WHEN语句来有效地进行条件性聚合查询,通过具体示例展示了CASE WHEN在统计分析中的应用技巧。
68 0
|
3月前
|
SQL 关系型数据库 MySQL
8、SQL高级用法
8、SQL高级用法
19 0
|
5月前
|
SQL 数据库
SQL中CASE WHEN THEN ELSE END的用法详解
SQL中CASE WHEN THEN ELSE END的用法详解
|
5月前
|
SQL
SQL语句case when then else end用法
SQL语句case when then else end用法
|
5月前
|
SQL 数据库
SQL DISTINCT 用法总结
SQL DISTINCT 用法总结