oracle中case when与decode的区别

上一篇 / 下一篇  2009-11-25 18:17:50 / 个人分类:oracle学习

发现decode与case when的作用好像有点雷同,迷糊中。百度了一下,功能果然是差不多的,但还是有区别的。

我前面的一篇文章oracle中CASE WHEN的用法-实例中的SQL语句,都可以用decode实现,列举如下:

(1)

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

可改写为

select u.id,u.realname,U.SEX,
       decode (u.sex,1,'男',2,'女','空')性别
from users u;

(2)

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;

可改写为

select
 sum(decode(u.sex,1,1,0))男,
 sum(decode(u.sex,2,1,0))女,
 sum(decode(u.sex,1,0,2,0,1))性别为空
from users u;

(3)

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;

可改写为

select u.creator_id 创建者ID,
 sum(decode(u.sex,1,1,0))男,
 sum(decode(u.sex,2,1,0))女,
 sum(decode(u.sex,1,0,2,0,1))性别为空
from users u
group by u.creator_id;

(4)

看起来,decode好像更简洁。
但是,有的情况下,却是使用case when相对简单些。如下。

  例如:

  SELECT CASE X-FIELD
  WHEN X-FIELD < 40 THEN ‘X-FIELD < 40’
  WHEN X-FIELD < 50 THEN ‘X-FIELD < 50’
  WHEN X-FIELD < 60 THEN ‘X-FIELD < 60’
  ELSE ‘UNBEKNOWN’END
  FROM DUAL

  在这种情况下,CASE语句显得比较简捷灵活。
    当需要匹配少量数值时,选用Decode会更加方便一些。


TAG:

引用 删除 edison1256   /   2009-12-29 13:22:35
5
 

评分:0

我来说两句

Open Toolbar