oracle数据库的行转列,[数据库]Oracle行转列(使用pivot函数)

本文介绍了如何使用Oracle数据库的Pivot函数将数据行转换为列,通过示例展示了具体操作步骤,并提供了另一种不使用Pivot函数但能达到相同效果的方法。文章还提到了Oracle的Unpivot函数,但未深入探讨。
摘要由CSDN通过智能技术生成

[数据库]Oracle行转列(使用pivot函数)

0 2015-07-03 12:00:14

在日常使用中,经常遇到这样的情况,需要将数据库中行转化成列显示,如

bc91bb04e6e9c61e24c974e4440db8f2.gif

bc91bb04e6e9c61e24c974e4440db8f2.gif转化为

bc91bb04e6e9c61e24c974e4440db8f2.gif

这个时候,我们就需要使用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 temp)pivot (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函数,实现列转换的操作,项目中还没有使用,也就没有细细研究了。

参考地址:http://blog.csdn.net/xb12369/article/details/39554935解决长久以来遇到的问题,心情舒畅,遂记录于此,方便后来查看

转载请保留本文网址:http://www.shaoqun.com/a/122708.html

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:admin@shaoqun.com。

oracle

0

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值