PL/SQL 实现行列转换
这篇博文写的是简单的行列转换的,以一个具体的例子来给出。
以前在论坛上有人问过相关的问题,上面的回答五光十色,有很多是可行的,当然更多的是自以为很高端,实际却不着边际的回答。下面进入正题。
part1:列转行。需求:
示例给出这么一张表:
表定义如下:

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

要求转换成为:
下面给出一个可行的PL/SQL语句:

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

实现效果如下图需求所示。
Part2:行转列。需求:
示例给出这样一张表
表结构如下:

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

需要转换成如下形式:
下面给出一个可执行的PL/SQL语句:

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

实现效果如下图需求所示。
本文旨以一个具体的例子,给出一种Oracle中行列转换的方案,没有什么可圈可点的地方,欢迎给出其他实现,也欢迎批评指正!
转自:http://www.cnblogs.com/DebugLZQ/archive/2012/07/23/2604687.html
PL/SQL 实现行列转换的更多相关文章
- SQL Server 行列转换
/* 标题:普通行列转换(version 2.0) 作者:范中磊 说明:普通行列转换(version 1.0)仅针对sql server 2000提供静态和动态写法,version 2.0增加sql ...
- [转载]SQL Server行列转换实现
可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P 完整语法: table_source PIVOT( 聚合函数(value_ ...
- Sql的行列转换
创建表scores 一.传统的行列转换 纵表转横表 我们要转成的横表是这样子的: pivot是sql server 2005 提供的运算符,所以只要数据库在05版本以上的都可以使用.主要用于行和列的转 ...
- Sql实现行列转换
从MS Sql Server 2005微软就推出了pivot和unpivot实现行列转换,这极大的方便了我们存储数据和呈现数据.今天就对这两个关键字进行分析,结合实例讲解如何存储数据,如何呈现数据. ...
- 简单的叙述下SQL中行列转换的小知识!
行列转换对于工作还是学习中总是不可避免的会遇到(虽然本人还尚未工作,萌萌哒的学生一枚),解决的方法也有很多,我这里就总结一下我所想解决的问题以及怎么去解决的方法, 可能网上已经有很多类似的方法了,有的 ...
- 12、SQL Server 行列转换
SQL Server 行转列 在SQL Server 2005中PIVOT 用于将列值转换为列名(行转列),在SQL Server 2000中是没有这个关键字的 只能用case语句实现. --创建测试 ...
- SQL SERVER 行列转换(动态)
行转列测试数据: --测试数据 if not object_id(N'Tempdb..#T') is null drop table #T Go Create table #T([Name] nvar ...
- SQL中行列转换Pivot
--建表 ),课程 ),分数 int) --插入数据 ) ) ) ) ) ) 1.静态行转列(确定有哪些列) select 姓名, end)语文, end)数学, end)物理 from tb gro ...
- PL/SQL配置大小写转换等快捷键
Tools(工具) --> Preferences(首选项) --> Key Configuration(键配置) 然后修改自己需要的快捷键方式 作者:itmyhome
随机推荐
- ES6 Proxy和Reflect(下)
construct() construct方法用于拦截new命令. var handler = { construct (target, args) { return new target(...ar ...
- Oracle 用户操作表权限
grant select any table to xxx 将使得xxx用户能够查看到所有用户的表:正确的授权不能是这样: 用户是隔离表的schema,授权时..
- 三:Redis连接池、JedisPool详解、Redisi分布式
单机模式: package com.ljq.utils; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; ...
- 01-java技术体系基础
java体系基础 理论 编程语言: 系统级: C, C++, go, erlang ... 应用级: C#, Java, Python, Perl, Ruby, php 虚拟机: jvm(java虚拟 ...
- 关于Python的函数(Method)与方法(Function)
先上结论: 函数(function)是Python中一个可调用对象(callable), 方法(method)是一种特殊的函数. 一个可调用对象是方法和函数,和这个对象无关,仅和这个对象是否与类或实例 ...
- js 对象的值传递
一.变量赋值的不同 1.原始值 在将一个保存着原始值的变量复制给另一个变量时,会将原始值的副本赋值给新变量,此后这两个变量是完全独立的. 2.引用值: 在将一个保存着对象内存地址的变量复制给另一个变量 ...
- form注册表单圆角 demo
form注册表单圆角 <BODY> <div class="form"> <ul class="list"> <li& ...
- 【Python3之正则re】
一.正则re 1.正则表达式定义 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则.(在Python中)它内嵌在Pytho ...
- linux中搭建solr集群出现org.apache.catalina.LifecycleException: Failed to initialize component ,解决办法
07-Jan-2018 20:19:21.489 严重 [main] org.apache.catalina.core.StandardService.initInternal Failed to i ...
- Hyperledger Fabric 1.0 从零开始(十二)——fabric-sdk-java应用【补充】
在 Hyperledger Fabric 1.0 从零开始(十二)--fabric-sdk-java应用 中我已经把官方sdk具体改良办法,即使用办法发出来了,所有的类及文件都是完整的,在文章的结尾也 ...