- 论坛徽章:
- 0
|
/*
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
-----
|
|