SQL Case when 的使用方法

Case具有两种格式:简单Case函数和Case搜索函数。

  • 简单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部分将会被自动忽略

用法1:case when 应用于数据展示


  select 
      when    [列] like '%maomao%'  then 'maomao'
      when    [列] like '%xiao%'  then 'xiaoxiao'
      else 'other' 
 )as 'then用法'
from  [maomao365.com]
 当第一个when满足后,则展示出 maomao ,其它when 和else 则不执行
  如果所有的when条件都得不到满足,则输出else 的结果


用法2:case when 应用于数据统计

  select 
  sum (
      when    [列]  like '%maomao%'  then 1
      else 0 
 )as 'sum1',
  sum (
      when    [列]  like '%xiaoxiao%'  then 1
      else 0 
 )as 'sum2'
from  [maomao365.com]


用法3:case when where数据检索

   select 
from  [maomao365.com]  
where 
      when    [列] like '%maomao%'  then 1
      when    [列] like '%xiao%'  then 1
      else 0
 )  =1
  以上sql脚本会展示出 列值包含maomao 或 列值包含xiao的数据行

请写出sql语句:

select PersonID,sum(case when Thirdscore=100 then 1 else 0 end)  as times, count(PersonID)
from Persons
group by PersonID
order by PersonID desc



CREATE TABLE TB_Test_Report
id  int identity,
stateid int,
userid  int,
username varchar(64)
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (20,1,'a')
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (10,2,'b')
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (20,2,'b')
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (10,1,'a')
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (10,1,'a')
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (10,3,'c')
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (10,3,'c')
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (20,1,'c')
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (10,1,'a')
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (10,1,'A')
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (30,1,'a')
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (30,1,'b')
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (30,1,'c')
 已知语句 select * from TB_Test_Report where stateid in (10,20)
 要求在语句后面增加条件(加入 and  或者 or  或者 表达式)
 查询出,所有stateid =10 和 (stateid=20 并且userid = 2) 的记录
SELECT *
FROM   TB_Test_Report