设为首页 加入收藏

TOP

Oracle行转列小结
2015-11-21 01:48:28 来源: 作者: 【 】 浏览:0
Tags:Oracle 小结

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

转换过程如下:

1、创建表结构

?

CREATE TABLE RowToCol 
( 
  ID NUMBER(10) not null, 
  USER_NAME VARCHAR2(20 CHAR), 
  COURSE VARCHAR2(20 CHAR), 
  SCORE VARCHAR2(20 CHAR)
) 

?

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


?

\

3、行转列实现效果


\

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,mysql,SqlServer三种数据.. 下一篇OracleWarehouseBuilder(OWB)安装..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: