oracle中CASE WHEN的用法-实例

上一篇 / 下一篇  2009-11-25 16:26:03 / 个人分类:oracle学习

实例演示:

(1)查询表users中的数据。

select u.id,u.realname,U.SEX from users u;

查询结果如下

--------------------------

   ID    REALNAME SEX
1  10082 松XX 
2  10084 林XX     1
3  10087 西XX 
4  10100 胡XX 
5  10102 龙XX     1
......

---------------------------

 

(2)上表结果中的“sex”是用代码表示的,希望将代码用中文表示。可在语句中使用CASE语句。

select u.id,u.realname,U.SEX,
      ( case u.sex
       when 1 then '男'
       when 2 then '女'
       else '空的'
       END
      ) 性别
from users u;

------------------------------

查询结果

  ID    REALNAME SEX 性别
1 10082 松XX         空的
2 10084 林XX     1   男
3 10087 西XX         空的
4 10100 胡XX         空的
5 10102 龙XX     1   男
......

-------------------------------

如果不希望列表中出现“sex”列,语句如下

select u.id,u.realname,
      ( case u.sex
       when 1 then '男'
       when 2 then '女'
       else '空的'
       END
      ) 性别
from users u;

 

(3)将sum与case结合使用,可以实现分段统计。

例如现在我希望将上表中各种性别的人数进行统计,sql语句如下

select
      sum( case u.sex when 1 then 1 else 0 end) 男性,
      sum( case u.sex when 2 then 1 else 0 end) 女性,
      sum( case when u.sex<>1 and u.sex<>2  then 1 else 0 end) 性别为空
from users u;

执行结果如下

----------------------

  男性  女性  性别为空
1 41    15   0

------------------------

如果学校内有数千名学生进行了考试,想统计60分以下、60-80分、80-100分的总人数,就可以使用这样的语句来实现。只是条件不同而已。

 

(4)如果sum、case when结合group by使用,可以进行分组分段统计。

如,我希望统计users表中每个创建者创建的男性、女性、无性别的用户总数(数据表中有一个字段creator_id,表示创建者的ID),语句如下

select u.creator_id 创建者ID,
      sum( case u.sex when 1 then 1 else 0 end) 男性,
      sum( case u.sex when 2 then 1 else 0 end) 女性,
      sum( case when u.sex<>1 and u.sex<>2  then 1 else 0 end) 性别为空
from users u
group by u.creator_id;

查询结果如下

----------------------------------

   创建者ID 男性 女性 性别为空
1          0    0   0
2 10000    35   12  0
3 11100    0    0   0
4 11060    0    0   0
5 11040    0    0   0
6 11080    2    0   0
7 10281    3    3   0
8 10580    1    0   0

----------------------------------

上例中只有一个分组字段,实现了1级统计;如果有多个分组字段,应该可以实现多级统计了。如有居民统计表,保存了人口信息、人口所在市、区、街道信息等,欲统计深圳市的人口数据,实现统计如下统计结果的话,就可以通过多级分组实现。

区划    男性居民     女性居民
深圳市  ?           ?
 南山区 ?           ?
   粤海 ?           ?
   科技 ?           ?
 宝安区 ?           ?
   新安 ?           ?

 

(5)case when的语法

CASE
WHEN <A> THEN <somethingA>
WHEN <B> THEN <somethingB>
ELSE <somethingE>
END


TAG:

引用 删除 edison1256   /   2009-12-29 13:21:24
5
 

评分:0

我来说两句

Open Toolbar