oracle纵表转成横表

一、建立表:

create table XCN
(
  NAME1 VARCHAR2(10),
  NAME2 VARCHAR2(10),
  NAME3 VARCHAR2(10),
  NAME4 VARCHAR2(10)
);

二、插入数据:

insert into XCN (NAME1, NAME2, NAME3, NAME4)
values ('李四', '朋友', '7', '2');
insert into XCN (NAME1, NAME2, NAME3, NAME4)
values ('李四', '熟人', '100', '20');
insert into XCN (NAME1, NAME2, NAME3, NAME4)
values ('王二', '敌人', '21', '2');
insert into XCN (NAME1, NAME2, NAME3, NAME4)
values ('李四', '家人', '6', '3');
insert into XCN (NAME1, NAME2, NAME3, NAME4)
values ('李四', '敌人', '5', '4');
insert into XCN (NAME1, NAME2, NAME3, NAME4)
values ('张三', '朋友', '2', '1');
insert into XCN (NAME1, NAME2, NAME3, NAME4)
values ('张三', '家人', '3', '1');
insert into XCN (NAME1, NAME2, NAME3, NAME4)
values ('张三', '敌人', '1', '0');
insert into XCN (NAME1, NAME2, NAME3, NAME4)
values ('王二', '家人', '22', '4');

 

三、把纵表转成横表:

select name1,max(case when name2='家人' then name3 else '0' end) 家人1,
max(case when name2='家人' then name4 else '0' end) 家人2,
max(case when name2='敌人' then name3 else '0' end) 敌人1,
max(case when name2='敌人' then name4 else '0' end) 敌人2,
max(case when name2='朋友' then name3 else '0' end) 朋友1,
max(case when name2='朋友' then name4 else '0' end) 朋友2,
max(case when name2='熟人' then name3 else '0' end) 熟人1,
max(case when name2='熟人' then name4 else '0' end) 熟人2

 from xcn group by name1;

查询结果为:

NAME1家人1家人2敌人1敌人2朋友1朋友2熟人1熟人2
李四63547210020
王二2242120000
张三31102100

 五、OVER (PARTITION BY ..)函数

select name1,name2,name3,name4,row_number() over (partition by name1 order by name1) from xcn ;

查询结果:

NAME1NAME2NAME3NAME4ROW_NUMBER()OVER(PARTITIONBYNA
李四朋友721
李四熟人100202
李四家人633
李四敌人544
王二敌人2121
王二家人2242
张三朋友211
张三家人312
张三敌人103

 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值