免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2093 | 回复: 1

[BI] sql里的case [复制链接]

论坛徽章:
0
发表于 2012-11-13 16:22 |显示全部楼层
/*
case 是SQL国际标准就有的,他的作用就是实现条件语句(如同一般计算机语言中的if和switch……case)按照不同的使用方法case有两种语法:
1.简单case语法是
就是实现相当于一般计算机语言中switch……case样式的,格式是
case 变量表达式              --对某个‘变量表达式’进行判断
when 值                      --当‘变量表达式’是某个‘值’时
then 返回值表达式            --返回‘返回值表达式’值
[when...
then...
.....]                       --可以进行多次判断
[else 其他情况返回值表达式]  --不符合所有when后面的就是其他情况了,其中else是可选的。
end                          --结束

举例,比如一个表的sex列用M表示男性,F表示女性,现在不要返回MF而是想返回男女就可以:
select (case sex when 'M' then '男' when 'F' then '女' end) from 表
2 case搜索函数
就是实现相当于一般计算机语言中if……elseif……样式的,格式是
case                       --case后面没有表达式表示使用的是搜索函数
when 条件                  --条件就是布尔表达式,也就判断语句
  then 返回值表达式        --条件为真时的返回该表达式值
[when ...
  then ...
.........]                 --可以进行多次判断
[else 其他情况返回值表达式]--不符合所有when后面的就是其他情况了
end                        -- 结束

同样的以性别为例
select (case when sex='M' then '男'  when sex = 'F' then '女' end) from 表
-----转自百度知道的回答 http://zhidao.baidu.com/question/194610739.html
*/
create table test_new as select * from test11;
select * from test_New;
truncate table test_new;
drop  table test_new;
alter table test11 add ssex char(2);
insert into test11 values(23,'2121',sysdate,'nv');
select year(t.ttime) from TEST11 t ;--oracle 关键字year不知道怎么用。。。
insert into test11 values as  select * from test11;
----------------原始数据
select * from TEST11 t;
TID        TNAME        TTIME        SSEX
11        12                             
111        1a2                            
21        2121                    2012-11-13 15:30:45       
21        2121                    2012-11-13 15:41:18        男
23        2121                    2012-11-13 15:41:31        女
23        2121                    2012-11-13 15:41:48        nv


-----------
select t.tid,
case when t.ssex='男' then '1'
  when t.ssex='女' then '2'
     else '' end
  from test11 t;
--else 可选的,如else '其他' end,则输出的结果,除了男、女,显示都是‘其他’。
//
select t.tid,
case when t.ssex='男' then '1'
  when t.ssex='女' then '2'
      end
  from test11 t;
   
---
Case具有两种格式。简单Case函数和Case搜索函数。
简单Case函数
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END

--Case搜索函数
CASE WHEN sex = '1' THEN '男'
WHEN sex = '2' THEN '女'
ELSE '其他' END  
   种方式,可以实现相同的功能。简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。还有一个需要注意的问题,Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。
--比如说,下面这段SQL,你永远无法得到“第二类”这个结果
CASE WHEN col_1 IN ( 'a', 'b') THEN '第一类'
WHEN col_1 IN ('a')  THEN '第二类'
ELSE'其他' END
--求出不同组,男人的数量和女人的数量。
select t.tid,count(case when t.ssex='男' then t.ssex else null end) 男,count(case when t.ssex='女' then t.ssex else null end) 女 from test11 t group by t.tid;
--结果数据
           TID        男        女
1        11        0        0
2        21        1        0
3        23        0        1
4        111        0        0
-----

论坛徽章:
5
天蝎座
日期:2014-01-23 12:27:392015亚冠之德黑兰石油
日期:2015-05-14 13:33:042015年亚洲杯之乌兹别克斯坦
日期:2015-03-06 14:10:38天秤座
日期:2014-01-24 15:03:052015亚冠之德黑兰石油
日期:2015-08-27 13:43:58
发表于 2012-11-27 12:24 |显示全部楼层
SQL里面的逻辑实现
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP