码迷,mamicode.com
首页 > 数据库 > 详细

数据库之Case When

时间:2015-08-11 23:37:07      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:数据库

       最近几天的工作本来组长是安排我用mindfocion画几个图,本来以为难点是这个控件的使用,但是开发的时候才发现因为数据量有点多,所以在开发的时候汇总这些信息倒是费了我非常多的功夫,最后总结一下就是写了几个SQL语句,这里与大家分享一下,如果有需要用的就太好了。

      先说一下需求,组长让我画一个图,要求是把最近几年的**信息统计一下,例如2012年这个**交接了多少次,2013年多少次,总共多少次。想想也不难是吧,于是组长问我怎么样,我就轻松的接下来了。但是以前一直接触的是简单的SQL语句和一些EntityFramework等工具,对于SQL语句就真的把我难住了,写了一天的SQL语句,也是没有达到想要的效果,后来上网看了一下,原来SQL里边有一个Case When语句。

       用途

       当我们在写SQL语句的时候,如果遇到这么一种情况,就是假如。。。,则。。。,否则。。。,例如,加入是城市是北京,就返回时中国城市,如果是东京,就返回日本城池,否则返回西欧城市。这个请款下我们就可以用到这个,例如下边的小例子。

select 
  case when t.name = '北京' then '中国' 
  case when t.name = '东京' then '日本' 
  else '西欧'
  end
from test1 t
      当然这还是一个简答的应用,例如我这次项目中用的CaseWhen的用法,就用到了条件筛选和SQL语句,例如我要查询2014年叫lisi的人有多少,2015年lisi的人有多少。那么下边的语句就能帮我简单的实现

select to_char(t.birthday ,'yyyy'),
  sum(case when to_char(t.birthday ,'yyyy')= '2014' and t.name = 'lisi' then 1
  when to_char(t.birthday ,'yyyy')= '2015' and t.name = 'lisi' then 1
  else 0
  end) as firYear
from test1 t group by to_char(t.birthday ,'yyyy');
      大家自己观察发现我在上边用到了Group by来进行分组,因为如果没有这个的话,查询出来的结果如下图  

       技术分享

      但是如果使用了group by分组的话,效果如下

      技术分享

      实现的效果不一样,所以大家需要什么样子的表格,就怎么查询就可以。

      其实上边说了这么多,好像就是一个if...else...,但是这个是所有数据库都可以实现的,但是在Oracle,还有一个类似于咱们的三目运算的一个小语法。

select decode(sex, 'M', 'Male', 'F', 'Female', 'Unknown')
from   employees;
      当然如果咱们的逻辑简单可以用这个,不过逻辑稍微复杂一些的建议不要用,感觉没有CaseWhen的逻辑清晰,而且代码的移植性也不太好。毕竟只有Oracle能用。

      总结一下,如果我们需要在数据库中进行逻辑判断,不防用一下咱们的CaseWhen,或者Oracle的decode。加上group by 效果更佳。

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

数据库之Case When

标签:数据库

原文地址:http://blog.csdn.net/lovemenghaibin/article/details/47426389

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!