始创于2000年 股票代码:831685
咨询热线:0371-60135900 注册有礼 登录
  • 挂牌上市企业
  • 60秒人工响应
  • 99.99%连通率
  • 7*24h人工
  • 故障100倍补偿
您的位置: 网站首页 > 帮助中心>文章内容

Oracle 11g行列转换之PIVOT

发布时间:  2012/9/5 16:59:01

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

现有问题如下:

问题描述:
  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为目标表,脚本如下:

create table table2(  
 fid number(12),  
 value varchar2(10),  
 attr varchar2(10)  
);  
  
insert into table2 values(1,'23','age');  
insert into table2 values(1,'boy','sex');  
insert into table2 values(2,'26','age');  
insert into table2 values(2,'boy','sex');  
  
  
create table table1(  
  id number(12),  
  name varchar2(20)  
);  
          
insert into table1 values(1,'Taylor');   
insert into table1 values(2,'Jim');  
如下语句可实现表TABLE1的行列转换:

select *  
  from table2 pivot(max(value) as attr for(attr) in('age' as age,  
                                                    'sex' as sex)); 

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

with pivot_table2 as(                                                      
select *  
  from table2 pivot(max(value) as attr for(attr) in('age' as age,  
                                                    'sex' as sex)))  
select t1.* from pivot_table2 pt,table1 t1  
where pt.fid=t1.id  
and pt.age_attr>24 and pt.sex_attr='boy' 


本文出自:亿恩科技【www.enkj.com】

服务器租用/服务器托管中国五强!虚拟主机域名注册顶级提供商!15年品质保障!--亿恩科技[ENKJ.COM]

  • 您可能在找
  • 亿恩北京公司:
  • 经营性ICP/ISP证:京B2-20150015
  • 亿恩郑州公司:
  • 经营性ICP/ISP/IDC证:豫B1.B2-20060070
  • 亿恩南昌公司:
  • 经营性ICP/ISP证:赣B2-20080012
  • 服务器/云主机 24小时售后服务电话:0371-60135900
  • 虚拟主机/智能建站 24小时售后服务电话:0371-60135900
  • 专注服务器托管17年
    扫扫关注-微信公众号
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 亿恩科技 版权所有  地址:郑州市高新区翠竹街1号总部企业基地亿恩大厦  法律顾问:河南亚太人律师事务所郝建锋、杜慧月律师   京公网安备41019702002023号
      0
     
     
     
     

    0371-60135900
    7*24小时客服服务热线