引言

用SQL完成数据库查询中数据的行列转换,不但必须撰写繁杂的编程代码,还可以撰写sql语句。在ORACLE中引进剖析作用将使工作更为简易。最先找到表格中全部关键字特性的较大数量,设定为n,次之为每一个关键字加上n列,应用剖析作用查看关键字特性所属列的部位。随后,将每一个关键词的几行特性变换为两列特性。最终,将转化成的新列拼出字符串数组构成一列,进而完成行列转换。

剖析作用致力于处理“总计测算”等难题。尽管绝大多数难题能够用PL/SQL处理,可是特性并不理想化。最先,查看自身不易写。次之,一些在SQL中难以立即做的查看,实际上是十分普遍的实际操作,例如在数据分析表中完成行迁移。因此用SQL查看是十分艰难的。在剖析涵数发生以前,大家务必应用自链接查询或子查询乃至繁杂的sql语句来完成句子。如今,只必须一条简易的SQL句子就可以完成,实行高效率进一步提高。文中将举例子怎样运用剖析作用完成数据信息中的列和行的交换。

标准

1.剖析涵数的文件格式和英语的语法。

剖析作用是依据纪录行的排序测算其总价值。行的排序称之为对话框,由分析句子界定。针对每一个纪录行,界定一个“滚动”对话框。此对话框明确当今行测算的范畴。对话框的多少能够由每排的具体总数或逻辑性间距(如時间)决策。

剖析从下列方式逐渐:

Analytic-Function(,,...)OVER ()

(1)解析函数:1)解析函数的名字。Oracle10gR2中几个内嵌的剖析涵数,包含AVG,CORR,COVAR_POP,COVAR_SAMP,COUNT,LAG,LAST,LEAD,MAX,MIN,RANK,SUM等。针对客户界定的剖析涵数,剖析涵数的标题必须达到标志符标准。

(2)主要参数:主要参数。剖析涵数一般有0到3个主要参数,这种主要参数能够是一切数据种类或能够隐式变换为数据种类的基本数据类型。能够依据具体情况应用客户界定的主要参数。

(3)OVER:是剖析作用务必使用的关键字。针对既能够作为聚合函数又可以作为剖析涵数的涵数,Oracle无法识别他们,因而必须应用over将此涵数鉴别为剖析涵数。

(4)Query-Partition-子句:查看排序子句,PARTITION BY依据系统分区关系式设定的标准,将一个結果逻辑性区划为n个排序系统分区关系式。剖析作用单独APP于每一个组,并在运用时重设。

(5)Order-By子句:(依据…对组开展排列)是一个排列子句,它依据一个或好几个排列关系式对组开展排列。

(6)Windowing-子句对话框转化成句子:对话框转化成句子用以界定滚动或固定不动的数据信息对话框,剖析作用排序开展剖析。该句子能够测算组里一切界定的滚动或固定不动对话框。

2.练习题基本原理详细介绍。

在本例中,具备同样关键词的好几条纪录中的不一样列被并成为一列。比如,临时表包括五个字段:客户序号,联系电话,产品名字,业务流程地区和有关业务流程名字,每一个客户很有可能有好几个业务流程,因而建立数据分析表会造成沉余。如今务必想办法把号,电話,产品名字,业务流程地区同样的使用者的有关业务流程特性合拼成一列,处理沉余难题。应用Orcale中的分享作用完成那样的行列转换相对性简单便捷。

3.事例。

1)建立一个临时表。

create table temp (num varchar2(15),name varchar2(20),sex varchar2(2),classes varchar2(30),course_name varchar2(50) );

2)搭建数据信息。

insert into temp(num,name,sex,classes,course_name) values ('206211','王艺','男','06-1班','保险学');insert into temp(num,name,sex,classes,course_name) values ('206212','肖薇','女','06-2','保险学');insert into temp(num,name,sex,classes,course_name) values ('206212','肖薇','女','06-2','财务会计');insert into temp(num,name,sex,classes,course_name) values ('206212','肖薇','女','06-2','会计');insert into temp(num,name,sex,classes,course_name) values ('206213','陈雅诗','女','06-2','相应');insert into temp(num,name,sex,classes,course_name) values ('206213','陈雅诗','女','06-2','公共经济学');insert into temp(num,name,sex,classes,course_name) values ('206213','陈雅诗','女','06-2','公司理财');insert into temp(num,name,sex,classes,course_name) values ('206213','陈雅诗','女','06-2','管理学原理');insert into temp(num,name,sex,classes,course_name) values ('206213','陈雅诗','女','06-2','保险学');insert into temp(num,name,sex,classes,course_name) values ('206214','李丹阳','男','06-1','保险学');insert into temp(num,name,sex,classes,course_name) values ('206214','李丹阳','男','06-1','财务会计');insert into temp(num,name,sex,classes,course_name) values ('206214','李丹阳','男','06-1','会计');insert into temp(num,name,sex,classes,course_name) values ('206214','李丹阳','男','06-1','相应');insert into temp(num,name,sex,classes,course_name) values ('206214','李丹阳','男','06-1','公共经济学');insert into temp(num,name,sex,classes,course_name) values ('206215','杨伊琳','女','06-3班','自然环境企业管理学');insert into temp(num,name,sex,classes,course_name) values ('206215','杨伊琳','女','06-3班','管理学原理');insert into temp(num,name,sex,classes,course_name) values ('206215','杨伊琳','女','06-3班','商务沟通');insert into temp(num,name,sex,classes,course_name) values ('206216','李佳琪','男','06-2','土地资源可能');Commit;oracle行列转换函数-数据库sql语句大全实例-第1张图片3)先查验课程较多的组成。

select max(count(course_name))from tempgroup by num,name,sex,classes;oracle行列转换函数-数据库sql语句大全实例-第2张图片4)柱的部位。

当num,name,sex和classes同样时,应用剖析涵数中的row_number涵数搜索course_name的列部位(哪一列)。

Row_number涵数表述:回到井然有序组中国银行的偏移,可用以按特殊条件排列的号码。

select num, name, sex, classes, course_name, row_number() over(partition by num, name, sex, classes order by course_name) rn from temp;

oracle行列转换函数-数据库sql语句大全实例-第3张图片

蜂拥而至。会下来..

5)将课程的全部行更换为列。

select num,name,sex,classes, max(decode(rn,1,course_name,null)) course_name_1, max(decode(rn,2,course_name,null)) course_name_2, max(decode(rn,3,course_name,null)) course_name_3, max(decode(rn,4,course_name,null)) course_name_4, max(decode(rn,5,course_name,null)) course_name_5from (select num,name,sex,classes,course_name,row_number() over(partition by num,name,sex,classes order by course_name) rn from temp)group by num,name,sex,classes;

oracle行列转换函数-数据库sql语句大全实例-第4张图片

蜂拥而至。会下来..

6)将变换后的名字拼读成字符串数组,并将其放到一行中。

select num, name, sex, classes, (max(decode(rn, 1, course_name, null)) || max(decode(rn, 2, ',' || course_name, null)) || max(decode(rn, 3, ',' || course_name, null)) || max(decode(rn, 4, ',' || course_name, null)) || max(decode(rn, 5, ',' || course_name, null))) name from (select num, name, sex, classes, course_name, row_number() over(partition by num, name, sex, classes order by course_name) rn from temp) group by num, name, sex, classes;

oracle行列转换函数-数据库sql语句大全实例-第5张图片

蜂拥而至。会下来..

引言

文中的流程能够完成下列作用:

(1)测算具备同样关键字的较多组成;

(2)依据剖析作用,查看某一关键字的列部位;

(3)将全部要并入的行更改成列;

(4)拼读一些要合拼成字符串数组的列。

除开以上作用外,剖析作用还能够完成求饶,Top-N查看,统计分析一定范畴的数据库行对话框,跨表查看等作用。

评论(0条)

刀客源码 游客评论