1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > ORACLE中的行列转换(行转列 列转行)

ORACLE中的行列转换(行转列 列转行)

时间:2021-08-29 10:01:55

相关推荐

ORACLE中的行列转换(行转列 列转行)

一.行转列:

源表:

方法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))

效果:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。