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

相關文章
相關標籤/搜索