oracle和hive的行列转换,SQL行转列、列转行

oracle和hive如何实现行转列、列转行?

现在有oracle表student:三个字段name、subject、score,里面的数据是:
张三 语文 60
张三 数学 70
张三 英语 55
李四 语文 90
李四 英语 75
李四 物理 30
王五 语文 40
王五 英语 80
王五 物理 65

1. 用oracle SQL实现下面的统计结果?
name 语文 数学 英语 物理
张三 60 70 55 0
李四 90 0 75 30
王五 40 0 80 65

  • 方案1
    可以用oracle的pivot旋转函数处理:
select * from student pivot( sum(score) for subject in ("语文","数学","英语","物理"));
  • 方案2
    用聚合函数处理:
select
name,
--等同于max(case when subject="语文" then score else 0 end) as 语文,
max(if(subject="语文",score,0)) as 语文,
max(if(subject="数学",score,0)) as 数学,
max(if(subject="英语",score,0)) as 英语,
max(if(subject="物理",score,0)) as 物理
from student
group by name;
  • 方案3
    用union来连接:
(select 
--等同于"张三",if("语文",score,0) as 语文,
"张三",case subject when "语文" then score else 0 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值