case when then else end

来源:互联网 发布:各网络宽带资费标准 编辑:程序博客网 时间:2024/04/28 08:56

一、

(行遍历问题,面试)一道SQL语句面试题,关于group by
表内容:bs
bsrq       res
2005-05-09 胜
2005-05-09 胜
2005-05-09 负
2005-05-09 负
2005-05-10 胜
2005-05-10 负
2005-05-10 负

二、查询

1、select case when condition then result [when....][else result] end。

case子句可以用于任何表达式可以有效存在的地方。condition是一个返回boolean的表达式。如果结果为真,那么case表达式的结果就是符合条件的result;如果结果为假,那么以相同方式搜寻任何随后的when子句。如果没有when condition为真,那么case表达式的结果就是在else子句里的值。如果省略了else子句而且没有匹配的条件,结果为null。

select bsrq,'胜'=sum(case when  res='胜' then 1 else 0 end),
'负'=sum(case when res='负' then 1 else 0 end)
from bs group by bsrq

2、这个简单的case表达式是上面的通用形式的一个特殊的变种。

case expression when value then result [when] [else result] end

先计算expression的值,然后与所有在when子句里声明的value对比,直到找到一个相等的。如果没有找到匹配的,则返回在else子句里的result(或者null)。

select bsrq,'胜'=sum(case res when '胜' then 1 else 0 end),
'负'=sum(case res when '负' then 1 else 0 end)
from bs group by bsrq

原创粉丝点击