探讨SQL Server中Case 的不同用法

  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、付费专栏及课程。

余额充值