Oracle 行转列小结,Oracle 行转列小结

5268f80b9b1e01f982625ef6fac83ca1.png

转换过程如下:

1、创建表结构

CREATE TABLE RowToCol

(

ID NUMBER(10) not null,

USER_NAME VARCHAR2(20 CHAR),

COURSE VARCHAR2(20 CHAR),

SCORE VARCHAR2(20 CHAR)

)

2、插入测试数据(原始数据如图)

687e80018ec0fe03ddc61e908e48c9c8.png

3、行转列实现效果

ba2ea573f347c4d48e29eab93991de44.png

4、具体实现

主要原理是利用decode函数、聚集函数(sum/max/min/avg),结合group by分组实现的,具体sql如下:

select t.user_name as 姓名,

MAX(decode(t.course,'语文',score,null)) as 语文,

MAX(decode(t.course,'数学',score,null)) as 数学,

MAX(decode(t.course,'英语',score,null)) as 英语

from RowToCol t group by t.user_name order by t.user_name

*当要分组的值,如例子中的score列是数值型,则聚集函数可以使用sum/max/min/avg,但是字符行的只能使用max/min。

------------------------------------------------------------------------------------------------------------------------------------------------------

附注:

decode函数:

它是一种特有的函数计算方式,相当于计算机语言中的if...else...

decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)

其理解为:

if (条件==值1)

then

return(翻译值1)

elsif (条件==值2)

then

return(翻译值2)

......

elsif (条件==值n)

then

return(翻译值n)

else

return(缺省值)

end if

行转列包括行转列、列转行、多列转换成字符串、多行转换成字符串、字符串转换成多行和字符串转换成多列六种情况,如果大家有兴趣,可以进行进一步的研究。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Oracle 行转列小结

标签:plsql   oracle   行转列

1428d0e076c3959ab11d28a39bc84fab.png

5268f80b9b1e01f982625ef6fac83ca1.png

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:http://blog.csdn.net/u010924897/article/details/47066937

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值