ITPub博客

首页 > 数据库 > Oracle > sql与oracle中有关case和decode的用法(行转列)及比较

sql与oracle中有关case和decode的用法(行转列)及比较

Oracle 作者:hdw6636348 时间:2011-05-07 15:16:57 0 删除 编辑

http://hi.baidu.com/michael8119/blog/item/b0d4f754cb7e300c3a29359b.html

 

 

引:

         为了举例说明,这里创建了一张成绩表,如下图所示:

         sql与oracle中有关case和decode的用法(行转列)及比较

比较:

         1、sql中,这两个函数我们仅能使用case,代码及结果如下:

   select name,
       case Subject
          when '语文' then 1
          when '数学' then 2
          when '英语' then 3   --else 3
       end  as '科目代码'
   from Results

   sql与oracle中有关case和decode的用法(行转列)及比较

   同样的,我们可以用case实现行转列,代码及结果如下:

   select Name,
            sum(case when Subject='语文' then Result end) '语文',
            sum(case when Subject='数学' then Result end) '数学',
            sum(case when Subject='英语' then Result end) '英语'
   from Results
   group by Name

   sql与oracle中有关case和decode的用法(行转列)及比较

  

         2、但是,在oracle中,这两个函数我们都可以使用,代码及结果如下:

             decode用法:select Name,decode(Subject,'语文',1,'数学',2,'英语',3) 科目代码 from results;

                               select Name,decode(Subject,'语文',1,'数学',2,3) 科目代码 from Results;

                 case用法:

  select name,
       case 
          when Subject='语文' then 1
          when Subject='数学' then 2
          when Subject='英语' then 3  --else 3
       end  as 科目代码
  from Results;

  这两种方法均能达到同样的结果:

  sql与oracle中有关case和decode的用法(行转列)及比较

  同样的,我们可以使用这两个函数实现行转列,代码及结果如下:

  decode:

select 
   Name,
   sum(decode(Subject,'语文',Result,0)) 语文,
   sum(decode(Subject,'数学',Result,0)) 数学,
   sum(decode(Subject,'英语',Result,0)) 英语
from Results
group by Name;

     case:

select 
   Name,
   sum((case when Subject='语文' then Result else 0 end)) 语文,
   sum((case when Subject='数学' then Result else 0 end)) 数学,
   sum((case when Subject='英语' then Result else 0 end)) 英语
from Results
group by Name;

sql与oracle中有关case和decode的用法(行转列)及比较

 

数据库表与行转列的中间结果(想想还是也附上)

oracle中:

select 
   Name,
   decode(Subject,'语文',Result,0) 语文,
   decode(Subject,'数学',Result,0) 数学,
   decode(Subject,'英语',Result,0) 英语
from Results;

或

select 
   Name,
   (case when Subject='语文' then Result else 0 end) 语文,
   (case when Subject='数学' then Result else 0 end) 数学,
   (case when Subject='英语' then Result else 0 end) 英语
from Results; 

结果如下:

sql与oracle中有关case和decode的用法(行转列)及比较

以上内容,不对的地方请指正。此文仅想抛砖引玉...

<!-- 正文结束 -->

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

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2009-09-25