sql系列之001_{case~~when~~ then}

1、等值判断,相当于switch case

CASE expression
 WHEN value1 THEN returnvalue1
 WHEN value2 THEN returnvalue2
 WHEN value3 THEN returnvalue3
ELSE defaultreturnvalue
END
例如:
          case level
          when 1 then '大叔'
          when 2 then '二叔'
          when 3 then '小叔'
    end

相当于Switch,只能等值判断。

        select username,叔级别=(  
  1.     case level  
  2.         when 1 then '大叔'  
  3.         when 2 then '二叔'  
  4.         when 3 then '小叔'  
  5.     end  
  6. )     
  7. from userinfo  
select username,叔级别=(
	case level
		when 1 then '大叔'
		when 2 then '二叔'
		when 3 then '小叔'
	end
)	
from userinfo

其结果为:~~~

2、区间判断

CASE
WHEN condition1 THEN returnvalue1
WHEN condition 2 THEN returnvalue2
WHEN condition 3 THEN returnvalue3
ELSE defaultreturnvalue
END
相当于if…else if…else….(可以进行区间判断)
 
注意:then后面返回的数据类型要一致, returnvalue1、 returnvalue2、 returnvalue3的数据类型必须一致。

    

  1. select username,年纪=(      
  2.     case  
  3.         when age between 28 and 30 then '大叔'  
  4.         when age between 25 and 27 then '大青年'  
  5.         when age between 20 and 24 then '骚年'  
  6.          
  7.         when age < 20 then '小屁孩'  
  8.         else 'baby'  
  9.     end  
  10. )  
  11. from userinfo2  
 
select username,年纪=(    
    case
        when age between 28 and 30 then '大叔'
        when age between 25 and 27 then '大青年'
        when age between 20 and 24 then '骚年'
       
        when age < 20 then '小屁孩'
        else 'baby'
    end
)
from userinfo2

3、实际案例扯淡

     1、一般论坛中的用户等级

          论坛中用户的等
          case BBSlevel
             when 1  then '骨灰'
             when 2  then '大虾'
            when  3  then '菜鸟'
        end

    2、订单表中,统计每个销售员的总销售金额,列出销售员名、总销售金额、称号(>10W金牌,>5W银牌,>1W铜牌,否则普通)

    3、电商用户 根据用户消费总额 予以不同的等级

    4、游戏行业 玩家等级
 

单号   金额
RMB1 10
RMB2   20
RMB3    -30
RMB4    -10
将上面的表输出为如下的格式:
单号   收入   支出
RMB1     10       0
RMB2     20       0
RMB3      0        30
RMB4    0        10

  1. select number,  
  2. (  
  3.     case   
  4.         when amount > 0 then amount  
  5.         else 0  
  6.     end  
  7. ) 收入,  
  8. (  
  9.     case   
  10.         when amount < 0 then abs(amount)  
  11.         else 0  
  12.     end   
  13. ) 支出  
  14. from test  
select number,
(
	case 
		when amount > 0 then amount
		else 0
	end
) 收入,
(
	case 
		when amount < 0 then abs(amount)
		else 0
	end 
) 支出
from test


原文地址:https://www.cnblogs.com/zjflove/p/2923825.html