ORACLE11G行列转换之PIVOT

本文对ORACLE11G的行列转换操作的简单实例,供初学者参考。

现有问题如下:

问题描述:
  Table1
  Id Name
  1 Taylor
  2 Jim
    
  Table2
  FId value attr
  1 23 age
  1 boy sex
  2 26 age
  2 boy sex

Table1 Id 是主键,Table2 的FId 是外键,对应Table1 的主键


要查出age大于24,且sex 是boy 的人的name   
结果是:
Name
Jim

创建表病插入数据,其中TABLE1为源表,TABLE2为目标表,脚本如下:

[sql]   view plain copy print ?
  1. create table table2(  
  2.  fid number(12),  
  3.  value varchar2(10),  
  4.  attr varchar2(10)  
  5. );  
  6.   
  7. insert into table2 values(1,'23','age');  
  8. insert into table2 values(1,'boy','sex');  
  9. insert into table2 values(2,'26','age');  
  10. insert into table2 values(2,'boy','sex');  
  11.   
  12.   
  13. create table table1(  
  14.   id number(12),  
  15.   name varchar2(20)  
  16. );  
  17.           
  18. insert into table1 values(1,'Taylor');   
  19. insert into table1 values(2,'Jim');   

如下语句可实现表TABLE1的行列转换:

[sql]   view plain copy print ?
  1. select *  
  2.   from table2 pivot(max(value) as attr for(attr) in('age' as age,  
  3.                                                     'sex' as sex));  

最后如下语句即可解答开始的问题:

[sql]   view plain copy print ?
  1. with pivot_table2 as(                                                      
  2. select *  
  3.   from table2 pivot(max(value) as attr for(attr) in('age' as age,  
  4.                                                     'sex' as sex)))  
  5. select t1.* from pivot_table2 pt,table1 t1  
  6. where pt.fid=t1.id  
  7. and pt.age_attr>24 and pt.sex_attr='boy'  

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24867611/viewspace-735349/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24867611/viewspace-735349/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值