一、行转列
1.1、初始测试数据

表结构:TEST_TB_GRADE

Sql代码:

1    create table TEST_TB_GRADE
2    (
3      ID        NUMBER(10) not null,
4      USER_NAME VARCHAR2(20 CHAR),
5      COURSE    VARCHAR2(20 CHAR),
6      SCORE     FLOAT
7    )

初始数据如下图:

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

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

Sql代码:
1    select t.user_name,
2      sum(decode(t.course, '语文', score,null)) as CHINESE,
3      sum(decode(t.course, '数学', score,null)) as MATH,
4      sum(decode(t.course, '英语', score,null)) as ENGLISH
5    from test_tb_grade t
6    group by t.user_name
7    order by t.user_name
1.3、延伸

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

具体的实现sql如下:
Sql代码:

01    select t2.SCORE_GP,
02      sum(decode(t2.course, '语文', COUNTNUM,null)) as CHINESE,
03      sum(decode(t2.course, '数学', COUNTNUM,null)) as MATH,
04      sum(decode(t2.course, '英语', COUNTNUM,null)) as ENGLISH
05    from (
06      select t.course,
07             case when t.score  <60 then '00-60'
08                  when t.score >=60 and t.score <80  then '60-80'
09                  when t.score >=80 then '80-100' end as SCORE_GP,
10             count(t.score) as COUNTNUM
11      FROM test_tb_grade t
12      group by t.course, 
13            case when t.score  <60  then '00-60'
14                  when t.score >=60 and t.score <80  then '60-80'
15                  when t.score >=80 then '80-100' end
16      order by t.course ) t2
17    group by t2.SCORE_GP
18    order by t2.SCORE_GP
二、列转行

1.1、初始测试数据
表结构: TEST_TB_GRADE2 
Sql代码:  
1    create table TEST_TB_GRADE2
2    (
3      ID         NUMBER(10) not null,
4      USER_NAME  VARCHAR2(20 CHAR),
5      CN_SCORE   FLOAT,
6      MATH_SCORE FLOAT,
7      EN_SCORE   FLOAT
8    )

初始数据如下图:

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

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

1    select user_name, 'CN_SCORE' COURSE , CN_SCORE as SCORE from test_tb_grade2 
2    union
3    select user_name, 'MATH_SCORE' COURSE, MATH_SCORE as SCORE from test_tb_grade2 
4    union
5    select user_name, 'EN_SCORE' COURSE, EN_SCORE as SCORE from test_tb_grade2 
6    order by user_name,COURSE

也可以利用【insert all into ... select】来实现,首先需要先建一个表TEST_TB_GRADE3:
Sql代码:  
1    create table TEST_TB_GRADE3  
2    ( 
3          USER_NAME VARCHAR2(20 CHAR),  
4          COURSE    VARCHAR2(20 CHAR),  
5          SCORE     FLOAT  
6    )
   
 再执行下面的sql: 
  Sql代码:  
1    insert all
2    into test_tb_grade3(USER_NAME,COURSE,SCORE) values(user_name, '语文', CN_SCORE)
3    into test_tb_grade3(USER_NAME,COURSE,SCORE) values(user_name, '数学', MATH_SCORE)
4    into test_tb_grade3(USER_NAME,COURSE,SCORE) values(user_name, '英语', EN_SCORE)
5    select user_name, CN_SCORE, MATH_SCORE, EN_SCORE from test_tb_grade2;
6    commit;

 别忘记commit操作,然后再查询TEST_TB_GRADE3,发现表中的数据就是列转成行了。
原文地址:http://www.2cto.com/database/201108/100792.html

Oracle 行转列,列转行的更多相关文章

  1. oracle 行转列、列转行

    最近做数据处理,经常遇到需要行转列.列转行的场景,记录个非常简单实用的oracle  列转行.行转的列方法 1.行转列,基础数据如下 做行转列处理 处理SQL select user_name,max ...

  2. Oracle 多行变一列的方法

    多行变一列的方法有很多,觉得这个第一眼看懂了当时就用的这个办法. 情况是这样的.以下数据前几列是一样的,需要把VAT_VALUE_CHAR 的值放在同一行上. SELECT * FROM ps_vat ...

  3. oracle 行转列 分析函数

    oracle 行转列 首先看一下源数据: 方法一:WM_CONCAT group by 这个方法没有问题. SELECT CODE_TS, WMSYS.WM_CONCAT(S_NUM + || ':' ...

  4. Oracle 多行转多列

    Oracle 多行转多列,列值转为列名   前段时间做调查问卷,客户创建自定义问卷内容,包括题目和选项内容; 之后需要到处问卷明细,,,,麻烦来咯 于是到网上到处搜索,没有直接结果;于是又找各种相似的 ...

  5. SQL Server 行转列,列转行。多行转成一列

    一.多行转成一列(并以","隔开) 表名:A 表数据: 想要的查询结果: 查询语句: SELECT name , value = ( STUFF(( SELECT ',' + va ...

  6. ORACLE行转列通用过程

    create or replace procedure row_to_col(tabname in varchar2,                                   group_ ...

  7. Oracle 中的伪列

    昨天做了一个Oracle PL/SQL 相关的测试,其中有一道这样的题目:   下列那些是Oracle的伪列(ACD)  A.ROWID   B.ROW_NUMBER()  C.LEVEL  D.RO ...

  8. 如何获取ResultSet的行数和列数

    当我们执行数据库查询返回一个ResultSet的时候,很多情况下我们需要知道这个ResultSet的大小,即它的行数和列数.我们知道它的列数可以通过resultSet.getMetaData().ge ...

  9. 根据oracle的主键列生成SQLserver的主键

    根据oracle的主键列生成MsSQLServer的主键列 select 'alter table  ' || cu.table_name ||'  add constraint  '||' PK_' ...

  10. MYSQL 多行转多列

    mysql 行变列(多行变成一行/多行合并成一行/多行合并成多列/合并行),我觉得这都是一个意思 数据库结构如图: 而我想让同一个人的不同成绩变成此人在这一行不同列上显示出来,此时分为2中展现: 第一 ...

随机推荐

  1. redis部署

    下载软件 [root@localhost /]# wget http://download.redis.io/releases/redis-2.8.9.tar.gz 解压.编译.安装 [root@lo ...

  2. 通过profiler对unity进行针对性优化

    转 : http://user.qzone.qq.com/289422269/blog/1453815629?ptlang=2052 通过profiler对unity进行针对性优化  1. CPU U ...

  3. 使用Carthage管理iOS依赖库

    Carthage安装和使用和CocoaPods类似: 1.安装: 终端执行以下命令: $ brew update $ brew install carthage 查看Carthage的版本号: $ c ...

  4. 批处理快速更改ip地址

    在各种网络中切换,windows更换ip地址步骤:  进入控制面板--网络和internet--网络和共享中心--理性适配器设置--然后找到网卡--进入属性--然后internet 协议--更改ip信 ...

  5. 微信html5开发选哪一个

        html5选哪个开发框架       ①. Justep起步 X5框架 : 专门用来开发web App的大型开发工具集,x5 v3.0有765.58M,不选. ②.Jquery Mobile ...

  6. linux 高级编程之库的使用

    一.静态库与动态库 静态库: .a .lib 动态库: .so .dll 差别(静态库中的代码在链接时就已经复制到可执行文件中,执行时不再依赖库,不会自动使用升级后的库,需要重新产生可执行文件. 动态 ...

  7. BZOJ3733 : [Pa2013]Iloczyn

    首先将$n$的约数从小到大排序,设$dfs(x,y,z)$表示当前可以选第$x$个到第$m$个约数,还要选$y$个,之前选的乘积为$z$是否可能. 爆搜的时候,如果从$x$开始最小的$y$个相乘也超过 ...

  8. 【《zw版&#183;Halcon与delphi系列原创教程》Halcon图层与常用绘图函数

    [<zw版·Halcon与delphi系列原创教程>Halcon图层与常用绘图函数 Halcon的绘图函数,与传统编程vb.c.delphi语言完全不同,     传统编程语言,甚至cad ...

  9. 最熟悉的陌生人:ListView 中的观察者模式

    RecyclerView 得宠之前,ListView 可以说是我们用的最多的组件.之前一直没有好好看看它的源码,知其然不知其所以然. 今天我们来窥一窥 ListView 中的观察者模式. 不熟悉观察者 ...

  10. VirtualizingStackPanel

    <FlipView x:Name="flipView1" ItemsSource="{Binding}" ScrollViewer.HorizontalS ...