ITPub博客

首页 > Linux操作系统 > Linux操作系统 > DECODE 與CASE WHEN

DECODE 與CASE WHEN

原创 Linux操作系统 作者:jack198409 时间:2007-12-04 00:00:00 0 删除 编辑

我现有表结构如下:
t_id t_type t_flag
1 水果 过期
2 食品 正常
3 干果 正常
4 水果 正常
5 水果 过期
6 食品 过期

现在我想查询的结果如下:
t_type 总数 过期个数
水果 3 2
食品 2 1
干果 1 0

with a as (select 1 id,'水果' type,'過期' FLAG FROM DUAL
UNION
select 2 id,'食品' type,'正常' FLAG FROM DUAL
UNION
select 3 id,'干果' type,'正常' FLAG FROM DUAL
UNION
select 4 id,'水果' type,'正常' FLAG FROM DUAL
UNION
select 5 id,'水果' type,'過期' FLAG FROM DUAL
UNION
select 6 id,'食品' type,'過期' FLAG FROM DUAL
)

第一種方法

select type,count(type) 總數,sum(decode(flag,'過期',1,0)) 過期個數 from a
group by type

第二種方法

select type,count(type),sum(eee) from
(select type,case when flag='過期' then 1
else 0 end eee from a)
group by type

以后能用DECODE的話盡量用DECODE,這樣要簡單的多,只要能用DECODE的語句都可以轉換為CASE WHEN,而CASE WHEN 語句則不一定可以轉換為DECODE


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10768286/viewspace-83489/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2007-12-13

  • 博文量
    135
  • 访问量
    295323