CASE WHEN 用法

http://www.cnblogs.com/janes/archive/2009/03/23/1419527.html

CASE 可能是 SQL 中被误用最多的关键字之一。虽然你可能以前用过这个关键字来创建字段,但是它还具有更多用法。例如,你可以在  WHERE 子句中使用  CASE。 
 
首先让我们看一下  CASE 的语法。在一般的  SELECT 中,其语法如下: 
 
SELECT  <myColumnSpec >  = 
CASE 
WHEN  <A >  THEN  <somethingA > 
WHEN  <B >  THEN  <somethingB > 
ELSE  <somethingE > 
END  
 
在上面的代码中需要用具体的参数代替尖括号中的内容。下面是一个简单的例子: 
 
USE pubs 
GO 
SELECT 
    Title, 
     ' Price Range '  = 
     CASE 
         WHEN price  IS  NULL  THEN  ' Unpriced ' 
         WHEN price  <  10  THEN  ' Bargain ' 
         WHEN price  BETWEEN  10  and  20  THEN  ' Average ' 
         ELSE  ' Gift to impress relatives ' 
     END 
FROM titles 
ORDER  BY price 
GO  
 
这是  CASE 的典型用法,但是使用  CASE 其实可以做更多的事情。比方说下面的  GROUP  BY 子句中的  CASE: 
 
SELECT  ' Number of Titles 'Count( *
FROM titles 
GROUP  BY 
     CASE 
         WHEN price  IS  NULL  THEN  ' Unpriced ' 
         WHEN price  <  10  THEN  ' Bargain ' 
         WHEN price  BETWEEN  10  and  20  THEN  ' Average ' 
         ELSE  ' Gift to impress relatives ' 
     END 
GO  
 
你甚至还可以组合这些选项,添加一个  ORDER  BY 子句,如下所示: 
 
USE pubs 
GO 
SELECT 
     CASE 
         WHEN price  IS  NULL  THEN  ' Unpriced ' 
         WHEN price  <  10  THEN  ' Bargain ' 
         WHEN price  BETWEEN  10  and  20  THEN  ' Average ' 
         ELSE  ' Gift to impress relatives ' 
     END  AS Range, 
    Title 
FROM titles 
GROUP  BY 
     CASE 
         WHEN price  IS  NULL  THEN  ' Unpriced ' 
         WHEN price  <  10  THEN  ' Bargain ' 
         WHEN price  BETWEEN  10  and  20  THEN  ' Average ' 
         ELSE  ' Gift to impress relatives ' 
     END
    Title 
ORDER  BY 
     CASE 
         WHEN price  IS  NULL  THEN  ' Unpriced ' 
         WHEN price  <  10  THEN  ' Bargain ' 
         WHEN price  BETWEEN  10  and  20  THEN  ' Average ' 
         ELSE  ' Gift to impress relatives ' 
     END
    Title 
GO  
 
注意,为了在  GROUP  BY 块中使用  CASE,查询语句需要在  GROUP  BY 块中重复  SELECT 块中的  CASE 块。 
 
除了选择自定义字段之外,在很多情况下  CASE 都非常有用。再深入一步,你还可以得到你以前认为不可能得到的分组排序结果集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值