在日常使用中,,經(jīng)常遇到這樣的情況,,需要將數(shù)據(jù)庫(kù)中行轉(zhuǎn)化成列顯示,,如 轉(zhuǎn)化為
這個(gè)時(shí)候,,我們就需要使用pivot函數(shù)
百度后,,參考網(wǎng)址http://www./database/201501/367164.html ,,完成了以下操作
with temp as( select '四川省' nation ,'成都市' city,'第一' ranking from dual union all select '四川省' nation ,'綿陽(yáng)市' city,'第二' ranking from dual union all select '四川省' nation ,'德陽(yáng)市' 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 ,'襄陽(yáng)市' city,'第三' ranking from dual ) select * from (select nation,city,ranking from temp)pivot (max(city) for ranking in ('第一' as 第一,'第二' AS 第二,'第三' AS 第三,'第四' AS 第四)); 這樣就順利的實(shí)現(xiàn)了操作,,其中關(guān)鍵函數(shù)pivot,,其用法如下
pivot(聚合函數(shù) for 列名 in(類(lèi)型)) --其中 in(‘’) 中可以指定別名,,in中還可以指定子查詢(xún),比如 select distinct ranking from temp 當(dāng)然也可以不使用pivot函數(shù),,使用下面的語(yǔ)句同樣可以實(shí)現(xiàn)效果
with temp as( select '四川省' nation ,'成都市' city,'第一' ranking from dual union all select '四川省' nation ,'綿陽(yáng)市' city,'第二' ranking from dual union all select '四川省' nation ,'德陽(yáng)市' 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 ,'襄陽(yáng)市' 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; 當(dāng)然Oracle還提供了unpivot函數(shù),,實(shí)現(xiàn)列轉(zhuǎn)換的操作,項(xiàng)目中還沒(méi)有使用,,也就沒(méi)有細(xì)細(xì)研究了,。
解決長(zhǎng)久以來(lái)遇到的問(wèn)題,心情舒暢,,遂記錄于此,,方便后來(lái)查看
|
|