oracle 行列转换逻辑

该需求涉及到两个知识点:一、分析函数;二、行列转换。
先讲实现
第一步:建测试表函数

SQL code ?测试

1.net

2code

3blog

4排序

5ip

6get

7it

8io

9

10

11

12

13

create table COL_TO_ROW

(

  COL1 VARCHAR2(20),

  COL2 VARCHAR2(20)

)

insert into col_to_row values('A','1');

insert into col_to_row values('A','12');

insert into col_to_row values('B','2');

insert into col_to_row values('B','23');

insert into col_to_row values('C','3');

insert into col_to_row values('C','334');

insert into col_to_row values('C','355')

select from COL_TO_ROW

 



第二步:对表进行分组,组内编号1,2,3

SQL code ?

1

select col1,col2,row_number()over(partition by col1 order by col2)colnum from COL_TO_ROW

 

 

第三步:行列转换,完成

SQL code ?

1

2

3

select col1,max(decode(colnum,1,col2,null))colA,max(decode(colnum,2,col2,null))colB,max(decode(colnum,3,col2,null))colC from (

select col1,col2,row_number()over(partition by col1 order by col2)colnum from COL_TO_ROW 

)group by col1

 



再讲知识点
一、row_number()over(partition by col1 order by col2)colnum
经过col1字段进行分组,并组内编号
row_number() over ([partition by col1] order by col2) ) as 别名
表示根据col1分组,在分组内部根据 col2排序
而这个“别名”的值就表示每组内部排序后的顺序编号(组内连续的惟一的),[partition by col1] 可省略。关于该知识点的实例详解,能够进我空间看看:http://user.qzone.qq.com/362701082/blog/1322635025 二、max(decode(colnum,1,col2,null))colA

相关文章
相关标签/搜索