Oracle行轉列(使用pivot函數)


在日常使用中,經常遇到這樣的情況,需要將數據庫中行轉化成列顯示,如

轉化為
這個時候,我們就需要使用pivot函數
百度后,參考網址 http://www.2cto.com/database/201501/367164.html ,完成了以下操作
with temp as(
select '四川省' nation ,'成都市' city,'第一' ranking from dual union all
select '四川省' nation ,'綿陽市' city,'第二' ranking from dual union all
select '四川省' nation ,'德陽市' city,'第三' ranking from dual union all
select '四川省' nation ,'宜賓市' city,'第四' ranking from dual union all
select '湖北省' nation ,'武漢市' city,'第一' ranking from dual union all
select '湖北省' nation ,'宜昌市' city,'第二' ranking from dual union all
select '湖北省' nation ,'襄陽市' city,'第三' ranking from dual
)
select * from select nation,city,ranking from temppivot (max(city) for ranking in ('第一' as 第一,'第二' AS 第二,'第三' AS 第三,'第四' AS 第四));
這樣就順利的實現了操作,其中關鍵函數pivot,其用法如下
pivot(聚合函數 for 列名 in(類型))
--其中 in(‘’) 中可以指定別名,in中還可以指定子查詢,比如 select distinct ranking from temp
當然也可以不使用pivot函數,使用下面的語句同樣可以實現效果
with temp as(
select '四川省' nation ,'成都市' city,'第一' ranking from dual union all
select '四川省' nation ,'綿陽市' city,'第二' ranking from dual union all
select '四川省' nation ,'德陽市' city,'第三' ranking from dual union all
select '四川省' nation ,'宜賓市' city,'第四' ranking from dual union all
select '湖北省' nation ,'武漢市' city,'第一' ranking from dual union all
select '湖北省' nation ,'宜昌市' city,'第二' ranking from dual union all
select '湖北省' nation ,'襄陽市' city,'第三' ranking from dual
)
 
select nation,
max(decode(ranking, '第一', city, '')) as 第一,
max(decode(ranking, '第二', city, '')) as 第二,
max(decode(ranking, '第三', city, '')) as 第三,
max(decode(ranking, '第四', city, '')) as 第四
from temp group by nation;
當然Oracle還提供了unpivot函數,實現列轉換的操作,項目中還沒有使用,也就沒有細細研究了。
解決長久以來遇到的問題,心情舒暢,遂記錄於此,方便后來查看

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM