微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

关于sqlserver中 case when的用法

select   getdate()   as   日期,case   month(getdate())  
  when   11   then   '十一'  
  when   12   then   '十二'  
  else   substring('一二三四五六七八九十',  month(getdate()),1)  
  end+'月'   as   月份

=================================================

CASE 可能是 sql 中被误用最多的关键字之一。虽然你可能以前用过这个关键字来创建字段,但是它还具有更多用法。例如,你可以在 WHERE 子句中使用 CASE

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁


sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

首先让我们看一下 CASE 的语法。在一般的 SELECT 中,其语法如下:

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁


sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

SELECT <myColumnSpec> =

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

CASE

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

WHEN <A> THEN <somethingA>

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

WHEN <B> THEN <somethingB>

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

ELSE <somethingE>

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

END

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁


sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

在上面的代码中需要用具体的参数代替尖括号中的内容。下面是一个简单的例子:

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁


sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

USE pubs

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

GO

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

SELECT

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

     Title,

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

    
'Price Range' =

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

    
CASE

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

        
WHEN price IS NULL THEN 'Unpriced'

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

        
WHEN price < 10 THEN 'Bargain'

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

        
WHEN price BETWEEN 10 and 20 THEN 'Average'

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

        
ELSE 'Gift to impress relatives'

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

    
END

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

FROM titles

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

ORDER BY price

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

GO

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁


sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

这是
CASE 的典型用法,但是使用 CASE 其实可以做更多的事情。比方说下面的 GROUP BY 子句中的 CASE

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁


sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

SELECT 'Number of Titles',Count(*)

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

FROM titles

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

GROUP BY

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

    
CASE

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

        
WHEN price IS NULL THEN 'Unpriced'

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

        
WHEN price < 10 THEN 'Bargain'

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

        
WHEN price BETWEEN 10 and 20 THEN 'Average'

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

        
ELSE 'Gift to impress relatives'

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

    
END

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

GO

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁


sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

你甚至还可以组合这些选项,添加一个
ORDER BY 子句,如下所示:

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁


sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

USE pubs

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

GO

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

SELECT

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

    
CASE

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

        
WHEN price IS NULL THEN 'Unpriced'

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

        
WHEN price < 10 THEN 'Bargain'

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

        
WHEN price BETWEEN 10 and 20 THEN 'Average'

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

        
ELSE 'Gift to impress relatives'

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

    
END AS Range,

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

     Title

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

FROM titles

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

GROUP BY

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

    
CASE

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

        
WHEN price IS NULL THEN 'Unpriced'

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

        
WHEN price < 10 THEN 'Bargain'

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

        
WHEN price BETWEEN 10 and 20 THEN 'Average'

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

        
ELSE 'Gift to impress relatives'

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

    
END,

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

     Title

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

ORDER BY

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

    
CASE

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

        
WHEN price IS NULL THEN 'Unpriced'

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

        
WHEN price < 10 THEN 'Bargain'

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

        
WHEN price BETWEEN 10 and 20 THEN 'Average'

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

        
ELSE 'Gift to impress relatives'

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

    
END,

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

     Title

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

GO

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁


sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

注意,为了在
GROUP BY 块中使用 CASE查询语句需要在 GROUP BY 块中重复 SELECT 块中的 CASE 块。

sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁


sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁

除了选择自定义字段之外,在很多情况下
CASE 都非常有用。再深入一步,你还可以得到你以前认为不可能得到的分组排序结果集。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐