case when then else end sql用法类似java里面的 if, else if, else,就是判断数据库结果集等于什么,你想让他显示什么结果,话不多说直接看下面。
首先有两种用法:
     
      第一种:
     
    
     
      
       【语法】
      
     
    
     
      CASE 表达式1
     
    
     
      WHEN 表达式2 THEN 表达式3
     
    
     
      …
     
    
     
      WHEN 表达式4 THEN 表达式5
     
    
     
      [ELSE 表达式6]
     
    
     
      END
     
    
     
      解释:
     
    
     
      
       
        将表达式1的值与各WHEN字句后面的表达式的值进行比较,如果两者相等,则返回THEN后面的值,然后跳出case语句(类似java 逻辑运算符得 if,else if 一旦找到结果相同的就会立马停止往下寻找并且跳出判断),
       
      
     
    
     
      否则返回ELSE子句中的表达式的值。ELSE子句是可选项,当case语句中不包含else子句时,若所有比较都失败,则case语句
     
     
      将返回NULL。
     
    
     
      
       
        【例子】从数据表stud_info中,选取stud_id、grade,如果grade为“男”则输出“M”,如果为“女”输出“F”。
       
      
     
    
     
      SELECT stud_id,
     
    
     
      (CASE gender
     
    
     
      WHEN ’男’ THEN ’M’
     
    
     
      WHEN ’女’ THEN ’F’
     
    
     
      END
     
    
     
      ) AS SEX
     
    
     
      FROM 表
      
     
    
     
      
       第二种
      
      :
     
    
     
      
       
        【语法】
       
      
     
    
     
      CASE WHEN 表达式2 THEN 表达式3
     
    
     
      …
     
    
     
      WHEN 表达式4 THEN 表达式5
     
    
     
      ELSE 表达式6
     
    
     
      END
     
    
     
      
       
        【原理】
       
      
     
    
     
      首先测试WHEN后的条件表达式的值,如果其值为真,则返回THEN后面的表达式的值,否则测试下一个WHEN子句中的表达式的值,
     
    
     
      如果所有WHEN子句后的表达式的值都为假,则返回ELSE后的表达式的值,如果在CASE语句中没有ELSE子句,则CASE表达式返回NULL。
     
    
     
      【例子】从stud_grade表中查询所有同学考试成绩情况,凡成绩为空者输出“未考”、小于60分输出“低于60不及格!”、60分至70分输出“60-70分之间成绩很一般!”、
     
    
     
      70分至80分输出“成绩大于70小于80成绩较优秀!”、80分到90分输出“成绩优秀80-90分!”大于或等于90分时输出“成绩非常好!”。
     
    
     
      SELECT
      
      id,
      
      (
      
      CASE
      
      WHEN
      
       成绩字段
      
      IS NULL THEN
      
      ‘缺考’
      
      WHEN 成绩字段< 60 THEN    ‘低于60不及格!’
      
      WHEN
      
       成绩字段
      
      BETWEEN 60 AND 70 THEN   ’60-70分之间成绩很一般!’
      
      WHEN
      
       成绩字段
      
      BETWEEN 70 AND 80 THEN   ‘成绩大于70小于80成绩较优秀!’
      
      WHEN
      
       成绩字段
      
      BETWEEN 80 AND 90 THEN  ‘成绩优秀80-90分!’ ELSE ‘成绩非常好!’
      
      END
      
      ) AS chengjis
      
      FROM
      
      表
     
    
     
      下面看case函数和聚合函数相结合得sql例子:
     
    
     
      select
      
      t3.region_id as ‘regionId’,
      
      t3.region_name as ‘regionName’,
      
      count(case when t1.tricolor = 1 then 1 else null end ) as ‘greenTotal’,
      
      count(case when t1.tricolor = 2 then 1 else null end ) as ‘yellowTotal’,
      
      count(case when t1.tricolor = 3 then 1 else null end )as ‘redTotal’
      
      from pa_household_member t1
      
      left join pa_household t2 on t2.household_id = t1.household_id
      
      left join system_region t3 on t3.region_id = t2.area
      
      group by t2.area
     
    
要点:
count在套住case when ….. 例如: count (case when ….end )
转载于:https://www.cnblogs.com/ysySelf/p/11383474.html
 
