`
sjsky
  • 浏览: 917979 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Oracle行列转换小结

阅读更多

   blog迁移至 :http://www.micmiu.com

 

目录结构如下:

  • 行转列
  • 列转行

[一]、行转列

 

1.1、初始测试数据

 

表结构:TEST_TB_GRADE

 

create table TEST_TB_GRADE
(
  ID        NUMBER(10) not null,
  USER_NAME VARCHAR2(20 CHAR),
  COURSE    VARCHAR2(20 CHAR),
  SCORE     FLOAT
)

 初始数据如下图:


                       

 

1.2、 如果需要实现如下的查询效果图:


                    

 

这就是最常见的行转列,主要原理是利用decode函数、聚集函数(sum),结合group by分组实现的,具体的sql如下:

select t.user_name,
  sum(decode(t.course, '语文', score,null)) as CHINESE,
  sum(decode(t.course, '数学', score,null)) as MATH,
  sum(decode(t.course, '英语', score,null)) as ENGLISH
from test_tb_grade t
group by t.user_name
order by t.user_name
 

 

1.3、延伸

 

如果要实现对各门功课的不同分数段进行统计,效果图如下:


                

 

具体的实现sql如下:

select t2.SCORE_GP,
  sum(decode(t2.course, '语文', COUNTNUM,null)) as CHINESE,
  sum(decode(t2.course, '数学', COUNTNUM,null)) as MATH,
  sum(decode(t2.course, '英语', COUNTNUM,null)) as ENGLISH
from (
  select t.course,
         case when t.score  <60 then '00-60'
              when t.score >=60 and t.score <80  then '60-80'
              when t.score >=80 then '80-100' end as SCORE_GP,
         count(t.score) as COUNTNUM
  FROM test_tb_grade t
  group by t.course, 
        case when t.score  <60  then '00-60'
              when t.score >=60 and t.score <80  then '60-80'
              when t.score >=80 then '80-100' end
  order by t.course ) t2
group by t2.SCORE_GP
order by t2.SCORE_GP
 

[二]、列转行

 

1.1、初始测试数据

        表结构:TEST_TB_GRADE2

create table TEST_TB_GRADE2
(
  ID         NUMBER(10) not null,
  USER_NAME  VARCHAR2(20 CHAR),
  CN_SCORE   FLOAT,
  MATH_SCORE FLOAT,
  EN_SCORE   FLOAT
)
 

        初始数据如下图:


       

 

1.2、 如果需要实现如下的查询效果图:


                      

 

这就是最常见的列转行,主要原理是利用SQL里面的union,具体的sql语句如下:

select user_name, '语文' COURSE , CN_SCORE as SCORE from test_tb_grade2 
union select user_name, '数学' COURSE, MATH_SCORE as SCORE from test_tb_grade2 
union select user_name, '英语' COURSE, EN_SCORE as SCORE from test_tb_grade2 
order by user_name,COURSE 

 

 也可以利用【 insert all into ... select 】来实现,首先需要先建一个表TEST_TB_GRADE3:

create table TEST_TB_GRADE3  
    ( 
      USER_NAME VARCHAR2(20 CHAR),  
      COURSE    VARCHAR2(20 CHAR),  
      SCORE     FLOAT  
    )  

 再执行下面的sql:

 

insert all
into test_tb_grade3(USER_NAME,COURSE,SCORE) values(user_name, '语文', CN_SCORE)
into test_tb_grade3(USER_NAME,COURSE,SCORE) values(user_name, '数学', MATH_SCORE)
into test_tb_grade3(USER_NAME,COURSE,SCORE) values(user_name, '英语', EN_SCORE)
select user_name, CN_SCORE, MATH_SCORE, EN_SCORE from test_tb_grade2;
commit;

 别忘记commit操作,然后再查询TEST_TB_GRADE3,发现表中的数据就是列转成行了。

 

 

本文连接:http://sjsky.iteye.com/blog/1152167

 

 

转载请注明来自:Michael's blog @ http://sjsky.iteye.com

----------------------------- 分 ------------------------------ 隔 ------------------------------ 线 ------------------------------

  • 大小: 3 KB
  • 大小: 20.6 KB
  • 大小: 5.3 KB
  • 大小: 5.8 KB
  • 大小: 8 KB
7
3
分享到:
评论
3 楼 k1280000 2012-03-31  
pivot
2 楼 sjsky 2011-08-20  
cectsky 写道
最近培训完才发现insert all的威力,见笑,本人不是搞仓库的..

本人也不是搞数据仓库的,只是用到 小结了下,不知仁兄培训的是哪方面的
1 楼 cectsky 2011-08-19  
最近培训完才发现insert all的威力,见笑,本人不是搞仓库的..

相关推荐

    oracle行列转换例子

    在Oracle数据库中,行列转换是一种常见的数据操作需求,主要用于将数据从行的形式转换为列的形式,或者反之。这种转换在数据分析、报表制作等场景中尤为常见。本文将深入解析一个Oracle行列转换的例子,通过详细解释...

    oracle行列转换总结

    在Oracle数据库中,行列转换是一项常用且强大的功能,它允许数据在不同的维度上进行转换,以便于数据分析和报告。本文将深入探讨Oracle中实现行列转换的几种方法,包括使用`UNION ALL`、`MODEL`子句以及集合类型(`...

    Oracle行列转换

    通过下载提供的`Oracle补充内容_行列转换.sql`文件,你可以看到具体的SQL示例和实际操作,这将帮助你更好地理解和掌握Oracle的行列转换技巧。在实践中,理解并熟练运用这些技术,将有助于你更有效地处理和展示数据,...

    oracle行列转换实例

    【Oracle 行列转换实例】 在数据库管理中,有时我们需要将数据表的行与列进行转换,以便于数据分析和报表展示。Oracle 提供了一种高效的方法,即使用分析函数来实现这种行列转换。分析函数主要设计用于处理累计计算...

    oracle行列转换

    Oracle 行列转换技巧详解 Oracle 行列转换是指将数据库表中的行转换为列或将列转换为行的一种操作。这种操作在实际应用中非常有用,例如在数据报表生成、数据分析和数据挖掘等领域。下面我们将详细介绍 Oracle 行列...

    oracle sql 行列转换

    行列转换,sys_connect_by_path,row_number等函数的用法

    oracle行列转换示例

    oracle行列转换示例,查询转换,有创表过程,数据,清晰明了

    Oracle 行列转换 总结

    Oracle 行列转换总结 Oracle 行列转换是指在 Oracle 数据库中将行与列之间进行转换的操作。这种转换有六种情况:列转行、行转列、多列转换成字符串、多行转换成字符串、字符串转换成多列、字符串转换成多行。 1. ...

    Oracle 行列转换总结

    ### Oracle 行列转换知识点详解 #### 一、概述 在数据库操作中,行列转换是一项非常实用的功能,尤其是在处理报表数据或需要特定格式输出时。本文档将详细讲解Oracle数据库中的行列转换方法,并通过具体实例来说明...

    ORACLE 行列转换

    在Oracle数据库中,行列转换是一种常见的数据操作需求,主要用于改变数据的展示格式,使得数据能够更好地适应特定的分析或报告需求。本文将详细介绍如何在Oracle中实现行转列(即行列转换的一种)以及列转行的操作,...

    Oracle行列转换_总结

    ### Oracle 行列转换知识点详解 #### 一、概述 在数据库操作中,有时需要将数据从行格式转换为列格式或反之亦然,这种需求通常被称为“行列转换”。Oracle 提供了多种方法来实现这样的转换,适用于不同的场景。本文...

    oracle行列转换_面试经常考到

    常见的数据库面试关于行转列列转行的操作,方便你的面试,经常考到的

    Oracle中SQL语句行列之间相互转换

    在Oracle数据库中,有时我们需要将表格中的行转换为列或将列转换为行,这种操作被称为行列转换。这种转换对于数据分析、报表制作等场景非常有用。本文将详细介绍Oracle中如何进行行列转换,并提供实际的例子。 ####...

    oracle行列转换的例子

    ### Oracle 数据库中的行列转换详解 #### 一、引言 在处理复杂的数据查询与展示时,经常会遇到需要将数据库中的行数据转换成列数据的需求,这种操作通常被称为“行列转换”。例如,当我们想要汇总不同部门对各种...

    oracle数据行列转换

    在Oracle数据库中,数据的行列转换是数据处理过程中的常见操作,尤其在数据分析、报表制作以及数据展示时显得尤为重要。本篇文章将详细讲解Oracle 10g中的行列转换技术,包括如何实现行转列和列转行。 首先,我们要...

    oracle行列转换[文].pdf

    Oracle数据库中的行列转换是数据分析和报表制作中常见的需求,它涉及到将数据表中的一行数据转化为多列,或者相反,将多列数据转化成一行。在Oracle中,我们可以使用多种方法来实现这种转换,比如使用Pivot、Unpivot...

    oracle知识 行列转换例子

    oracle知识列点 一个简单的行列转换例子,需要的可以看下

Global site tag (gtag.js) - Google Analytics