目录结构如下:
行转列
列转行
[一]、行转列
 
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. Codeforces Round #254 (Div. 1) D - DZY Loves Strings

    D - DZY Loves Strings 思路:感觉这种把询问按大小分成两类解决的问题都很不好想.. https://codeforces.com/blog/entry/12959 题解说得很清楚啦 ...

  2. 004 jquery过滤选择器-----------(基本过滤选择器)

    1.介绍 2.常见基本过滤器 3.程序 <!DOCTYPE html> <html> <head> <meta charset="UTF-8&quo ...

  3. 高能天气——团队Scrum冲刺阶段-Day 7 总结

    高能天气--团队Scrum冲刺阶段-Day 7 总结 今日完成任务 于欣月:修改项目说明书,帮助修改应用 余坤澎:进行应用整合的收尾工作 康皓越:进行应用整合的收尾工作 范雯琪:修改项目说明书,完成项 ...

  4. 如何利用JS判断当前来路域名并跳转到指定页面

    1.如何利用JS判断当前来路域名并跳转到指定页面 获取当前请求路径var href = location.href ;if(href.indexOf("baidu")>-1) ...

  5. Token以及签名signature的设计与实现

    LZ第一次给app写开放接口,把自己处理Token的实现记录下来,目的是如果以后遇到好的实现,能在此基础上改进.这一版写法非常粗糙,写出来就是让大家批评的,多多指教,感谢大家. 当初设计这块想达到的效 ...

  6. 做了一个可定制的英文记忆字典 - RDict

    RDict_1.0 下载 在我自己试用过程中, 随时发现了不少小问题, 我会随时更新下.

  7. 在Win7中用ftp的方法

    我的电脑是Win7  32位操作系统,之前一直没有成功使用过ftp 之初以为是ftp客户端的问题,换了几个软件都不行,然后换我的一台vps服务器(win2003)连接同一个ftp服务器可以正常连接使用 ...

  8. TC SRM601

    250 水题,上来想一下就可以搞了. 500,比赛时候没有想出来,结束后补了下,感觉很简单. 只要枚举两个集合异或结果哪一位二进制位不同,因为大小由最高位不同决定. 然后进行DP就可以了,比较好的题目 ...

  9. HDU 4778 Gems Fight! (2013杭州赛区1009题,状态压缩,博弈)

    Gems Fight! Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 327680/327680 K (Java/Others)T ...

  10. LPC-Link2 CMSIS-DAP firmware source

    LPC-Link2 CMSIS-DAP firmware source Hi, I'm using the CMSIS-DAP firmware with the LPC-Link2. I'd lik ...