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

近期在工作中。对行转列进行了应用,在此做一个简单的小结。

转换步骤例如以下:

1、创建表结构

CREATE TABLE RowToCol

(

ID NUMBER(10) not null,

USER_NAME VARCHAR2(20 CHAR),

COURSE VARCHAR2(20 CHAR),

SCORE VARCHAR2(20 CHAR)

)

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

5b76cd8df99917bc25945320030cd4de.png

3、行转列实现效果

09f0cc46392f0cc80df835a21fbf8fc4.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

行转列包含行转列、列转行、多列转换成字符串、多行转换成字符串、字符串转换成多行和字符串转换成多列六种情况。假设大家有兴趣,能够进行进一步的研究。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值