目录结构如下:
行转列
列转行
[一]、行转列
 
1.1、初始测试数据
 
表结构:TEST_TB_GRADE
 
Sql代码 
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如下:
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如下:
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
Sql代码 
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语句如下:
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:
Sql代码 
create table TEST_TB_GRADE3   
    (  
      USER_NAME VARCHAR2(20 CHAR),   
      COURSE    VARCHAR2(20 CHAR),   
      SCORE     FLOAT   
    )   
 再执行下面的sql:
 
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,发现表中的数据就是列转成行了。

Oracle行列转换小结的更多相关文章

  1. oracle 行列转换

    oracle 行列转换列名如果是数字,用双引号包住  如下: --  建表 create table workinfo(wid integer primary key,sid integer ,CON ...

  2. 行列转换小结 Pivot ,Unpivot (转,改)

    行专列 Pivot 1)SQL 2000版本 静态 SELECT ID , SUM(CASE Code WHEN 'Item1' THEN Value END) AS Item1 , SUM(CASE ...

  3. oracle行列转换函数的使用

    oracle 10g wmsys.wm_concat行列转换函数的使用: 首先让我们来看看这个神奇的函数wm_concat(列名),该函数可以把列值以","号分隔起来,并显示成一行 ...

  4. Oracle行列转换的思考与总结

    最近几天一直在弄Oracle-SQL的问题,涉及到了一些平时没有用到的东西,也因此而在这里郁闷了好久.现在问题得到了解决虽说不算完美.但是还是和大家一起分享一下. 行列转换之一:sum(case wh ...

  5. Oracle行列转换

    一.建表与插入数据 1.1.建表 create table kecheng ( id NUMBER, name ), course ), score NUMBER ); insert into kec ...

  6. SQL SERVER 中的行列转换小结

    1. 介绍说明 前段时间组内的小伙伴在升级维护项目中,经常涉及一些复杂的数据转换问题,让我去看下有些地方怎么处理,我发现好多都是涉及到行列转换的问题,处理起来经常会比较麻烦,借此也总结一下,方便以后的 ...

  7. oracle行列转换总结-转载自ITPUB

    原贴地址:http://www.itpub.net/thread-1017026-1-1.html 谢谢原贴大人 最近论坛很多人提的问题都与行列转换有关系,所以我对行列转换的相关知识做了一个总结, 希 ...

  8. Oracle 行列转换总结

    行列转换包括以下六种情况:*列转行*行转列*多列转换成字符串*多行转换成字符串*字符串转换成多列*字符串转换成多行 下面分别进行举例介绍. 首先声明一点,有些例子需要如下10g及以后才有的知识:a.掌 ...

  9. oracle 行列转换函数之WM_CONCAT和LISTAGG的使用(一)

    一.wm_concat函数 wm_concat能够实现同样的功能,但是有时在11g中使用需要用to_char()进行转换,否则会出现不兼容现象(WMSYS.WM_CONCAT: 依赖WMSYS 用户, ...

随机推荐

  1. 一些计数小Trick

    一些计数小Trick 虽然说计数问题如果不是特别傻逼的话想做出来基本随缘. 但是掌握一些基本的计数方法还是十分有必要的. 想到了就更新. 1. 对于排列的DP问题,一般是不能够按照位置一个一个放的,一 ...

  2. 后缀自动机(SAM)速成手册!

    正好写这个博客和我的某个别的需求重合了...我就来讲一讲SAM啦qwq 后缀自动机,也就是SAM,是一种极其有用的处理字符串的数据结构,可以用于处理几乎任何有关于子串的问题,但以学起来异常困难著称(在 ...

  3. Exception in thread "main" java.net.SocketTimeoutException: connect timed ou错误处理

    今天做了一个Jsoup解析网站的项目,使用Jsoup.connect(url).get()连接某网站时偶尔会出现java.net.SocketTimeoutException:Read timed o ...

  4. sqrt

    sqrt特别慢,两边同时平方,尽量避免开方.

  5. JAVA-Exception&Error

    JAVA--Exception&Error 在万物皆对象的JAVA中,先让我们看看Exception和Error的地位吧:

  6. CSS3实现原腾讯视频透明边框,多重边框等(关于边框那些不为人知的事情)

    1.hsla或rgba实现半透明边框. rgba在rgb的基础上增加了透明通道,就不详细说了,下面重点说下hsla: 说明: HSLA(H,S,L,A) 取值: H:Hue(色调).0(或360)表示 ...

  7. WEP保护帧移除工具airdecloak-ng

    WEP保护帧移除工具airdecloak-ng   为了防止WEP加密数据被破解,WIPS(无线入侵防御系统)会发送WEP保护帧.攻击者抓取WEP数据包时,也会获取这一类包,导致破解失败.aircra ...

  8. Xamarin iOS教程之自定义视图

    Xamarin iOS教程之自定义视图 Xamarin iOS自定义视图 工具栏中的视图在实际应用开发中用的很多,但是为了吸引用户的眼球,开发者可以做出一些自定义的视图. [示例2-33]以下将实现一 ...

  9. CCCC 成都信息工程大学游记

    晚上刷智障25人本,刷到深夜四点,然后迷迷糊糊8点钟起床上车睡觉,然后就到了信息工程大学. 然后开始抢衣服,抢完衣服就开始拍照. 对了,这个学校看了下地图,好小呀,不过妹子好多呀. 然后就被老师带进机 ...

  10. SLAM(一)----学习资料整理

    转自:http://www.cnblogs.com/wenhust/ 书籍: 1.必读经典 Thrun S, Burgard W, Fox D. <Probabilistic robotics& ...