該需求涉及到兩個知識點:一、分析函數;二、行列轉換。
先講實現
第一步:建測試表函數
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