行转列:源表:
文章插图
方法1:case when
select y,sum(case when q=1 then amt end) q1,sum(case when q=2 then amt end) q2,sum(case when q=3 then amt end) q3,sum(case when q=4 then amt end) q4from test04 group by y;
效果:
文章插图
方法2:decade(decode(字段 , v1(字段值或运算后的值) , retu1(字段值或运算后的值与v1一直的返回值) , retu(不一致的返回值)))
select y,sum(decode(q,1,amt)) as q1,sum(decode(q,2,amt)) as q2,sum(decode(q,3,amt)) as q3,sum(decode(q,4,amt)) as q4from test04group by y;
效果:
文章插图
方法3:pivot
select * from test04pivot(sum(amt) for q in(1 as q1,2 as q2,3 as q3,4 as q4))
效果:
文章插图
总结:case when 和decode 都是逐行判断 , 然后聚合取值 , 不同的是decode属于oracle内置函数 , 所以从运行效率上来说:pivot>decode>case when
列转行:
unpivot:unpivot(新列名 for 聚合列名 in (对应的列名1…列名n ))
select * from (select * from test04pivot(sum(amt) for q in(1 as q1,2 as q2,3 as q3,4 as q4))) --沿用上面行转列的基础上 , 进行列转行回来unpivot(amt for q in(q1,q2,q3,q4))
效果:
文章插图
【oracle中的行转列,列转行】
经验总结扩展阅读
- 我心中的英雄作文
- 重启之极海听雷中的张起灵是什么人
- 日本高中的假期是怎么安排的
- 狼与文学作品中的狼有何区别
- 浩海阑干百丈冰中的瀚海是指
- 工作7年收集到的git命令
- 勇跃报名什么意思
- 芥末的功效
- ae如何替换素材中的颜色
- 九层妖塔中的羿王是谁