1. 程式人生 > 實用技巧 >oracle列轉行

oracle列轉行

unpivot()函式
需要Oracle版本大於等於11g

--建立表

createtableFruit(idint,namevarchar(20),Q1int,Q2int,Q3int,Q4int);

--插入資料

insertintoFruitvalues(1,'蘋果',1000,2000,3300,5000);
insertintoFruitvalues(2,'橘子',3000,3000,3200,1500);
insertintoFruitvalues(3,'香蕉',2500,3500,2200,2500);
insertintoFruitvalues(4,'葡萄',1500,2500,1200,3500);

--查詢資料

select*fromFruit;

--列轉行查詢

selectid,name,jidu,xiaoshoufromFruitunpivot(xiaoshouforjiduin(q1,q2,q3,q4))

注意:
unpivot沒有聚合函式,xiaoshou、jidu欄位也是臨時的變數。等同於下面的SQL:

selectid,name,'Q1'jidu,(selectq1fromfruitwhereid=f.id)xiaoshoufromFruitf
union
selectid,name,'Q2'jidu,(selectq2fromfruitwhereid=f.id)xiaoshoufromFruitf
union
selectid,name,'Q3'jidu,(selectq3fromfruitwhereid=f.id)xiaoshoufromFruitf
union
selectid,name,'Q4'jidu,(selectq4fromfruitwhereid=f.id)xiaoshoufromFruitf