oracle行转列

Oracle实现行转列的几种思路

让人想犯罪 __ 提交于 2020-02-16 14:17:16
1.说明 这里主要介绍三种行转列的方式,其中方式一为传统的方式实现行转列,在这一节中我们分别介绍行转列中值为求个数、数字以及字符串三种方式;方式二主要借助11g新增加的函数pivot实现;方式三利用pivot和xml解决了方式二中硬编码的缺陷。 2.环境准备 2.1数据库版本 oracle版本:11g.2.0.4_x64 2.2 数据库初始化脚本 --创建数据表 create table stu(id int,name varchar2(20),course varchar(20),score int,lev varchar(5)); --插入数据 insert into stu(id,name,course,score,lev) select 1,'张三','语文',90,'优' from dual union select 2,'张三','数学',80,'良' from dual union select 3,'张三','英语',70,'中' from dual union select 4,'李四','语文',60,'差' from dual union select 5,'李四','数学',91,'优' from dual union select 6,'李四','英语',81,'良' from dual union select 7,'王五','语文',71,'中'

oracle 行转列解释与实例

痞子三分冷 提交于 2019-12-26 07:52:33
oracle 行转列实例 相关函数 -- oracle 中decode函数 语法 DECODE ( expr , search , result [ , search , result ] . . . [ , default ] ) 即DECODE ( value , if1 , then1 , if2 , then2 , if3 , then3 , . . . , else ) -- 解释 DECODEexpr逐个比较每个search值。如果expr等于 search,则Oracle Database 返回相应的result。如果未找到匹配项,则Oracle返回 default 。如果 default 省略,则Oracle返回 null 。 参数可以是任何数值类型(的NUMBER,BINARY_FLOAT或BINARY_DOUBLE),或字符类型。 如果expr和search是字符数据,那么Oracle使用nonpadded比较语义对它们进行比较。expr,search和result可以是任何数据类型的 CHAR ,VARCHAR2, NCHAR ,或NVARCHAR2。返回的字符串是VARCHAR2数据类型,与第一个result参数的字符集相同。 如果第一search - result对是数字,则Oracle比较所有search - result表达式

oracle 行转列 列转行函数理解

≯℡__Kan透↙ 提交于 2019-12-10 19:20:35
1、pivot 行转列函数 含义:pivot 聚合函数(字段1) for 字段2 in (值1,值2,值3...) 将字段2中的值1,值2,值3...作为字段名称在对字段1根据聚合函数做聚合(SUM、max、min、avg等)。 例、原表为: 将这个表格转换为按列的: select * from TABLE_20191210_PIVOT pivot ( max(income) for value1 in ('第一' as 第一,'第二' as 第二,'第三' as 第三) ) 解释:将income字段中的col_1作为一列重命名为第一列,col_2做为单独一列重命名为第二列,col_3做为单独一列重命名为第三列。 查找数据中有col_1、col_2、col_3的数据,对value1字段做聚合. 结果为: 2、unpivot 列转行函数 列转行函数用法与pivot函数类似 来源: CSDN 作者: weixin_41554608 链接: https://blog.csdn.net/weixin_41554608/article/details/103480542

Oracle行转列

杀马特。学长 韩版系。学妹 提交于 2019-12-03 14:45:01
如果是oracle 10g以上 一个wm_concat函数就可以解决。 如果是oracle 9i以下就有点麻烦了。 表结构如下: NAME Null Type N_SEC_CODE NOT NULL CHAR(6) C_RESEARCHER_CODE NOT NULL VARCHAR2(20) 此表保存了“股票”与“研究员”的对应关系数据,一般而言,对于同一只股票而言,可能有多个研究员 对其进行跟踪研究。所以目前遇到一个要求,需查询出每只股票和对应的研究员(研究员代码间,使用逗号分隔)。 例如有如下数据: 000297 chenpeng 000297 liusu 合并处理后需显示为: 000297 chenpeng,liusu 网上查了很多方法,但通常而言都是编写自定义多行文本合并函数,或者对支持的列数具有局限性。 最后在英文google中搜到如下比较巧的方法。不用在数据库中增加function,纯SQL一次性搞定, 而且扩充性很好,没有列的限制。 ORACLE纯SQL实现多行合并一行 - 南乡子 - 旅夜书怀ORACLE纯SQL实现多行合并一行 - 南乡子 - 旅夜书怀Code SELECT n_sec_code, TRANSLATE (LTRIM (text, '/'), ' /', ' ,') researcherList FROM (SELECT ROW_NUMBER ()

oracle行转列、列转行

匿名 (未验证) 提交于 2019-12-03 00:21:02
行转列:PIVOT 列转行:UNPIVOT 这两个是在oracle11g上面新增的函数。下面举例说明用法。 PIVOT: 学生成绩表,原数据: select class_name , student_name , course_type , result , created_date from class_tmp_2 ; 每个同学的两门成绩,是两条数据,因为业务需要,展示给用户看的时候,用户想要每个同学只要一条数据,并且把所有成绩都展示出来,比如 这个时候就需要用到行专列函数PIVOT. SELECT class_name , student_name , 语文, 数学, created_date FROM ( SELECT CLASS_NAME , STUDENT_NAME , COURSE_TYPE , RESULT , CREATED_DATE FROM CLASS_TMP_2 ) T PIVOT ( SUM ( RESULT ) FOR COURSE_TYPE IN ( '语文' AS 语文, '数学' AS 数学)); 浅灰色的sql和上面的原数据sql一样,主要看一下后面的PIVOT部分。 sum(result):成绩之和(PIVOT内需有聚集函数) for course_type in ('语文' as语文, '数学' as数学):将course

Oracle行转列操作

最后都变了- 提交于 2019-11-27 21:16:48
有时候我们在展示表中数据的时候,需要将行转为列来显示,如以下形式: 原表结构展示如下: --------------------------- 产品名称 销售额 季度 --------------------------- 奶酪 50 第一季度 奶酪 60 第二季度 啤酒 50 第二季度 啤酒 80 第四季度 --------------------------- 现在需要将上面的原表结构转换为如下所示的结构形式来展示: -------------------------------------------------------------------------- 产品名称 第一季度销售额 第二季度销售额 第三季度销售额 第四季度销售额 -------------------------------------------------------------------------- 奶酪      50        60 0   0 啤酒      0        50 0   80 -------------------------------------------------------------------------- 一、创建销售表sale_hst表结构 --创建销售表 create table sale_hst ( prdt_name varchar2