oracle 实现不同字段显示成一行数据

本文介绍如何使用SQL实现数据从列式存储到行式显示的转换,包括创建测试表、对表进行分组并编号,最后完成行列转换的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

该需求涉及到两个知识点:1、分析函数;2、行列转换。
先讲实现
第一步:建测试表
SQL code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
create  table  COL_TO_ROW
(
   COL1 VARCHAR2(20),
   COL2 VARCHAR2(20)
)
insert  into  col_to_row  values ( 'A' , '1' );
insert  into  col_to_row  values ( 'A' , '12' );
insert  into  col_to_row  values ( 'B' , '2' );
insert  into  col_to_row  values ( 'B' , '23' );
insert  into  col_to_row  values ( 'C' , '3' );
insert  into  col_to_row  values ( 'C' , '334' );
insert  into  col_to_row  values ( 'C' , '355' )
select  from  COL_TO_ROW


第二步:对表进行分组,组内编号1,2,3
SQL code
?
1
select  col1,col2,row_number()over(partition  by  col1  order  by  col2)colnum  from  COL_TO_ROW
 

第三步:行列转换,完成
SQL code
?
1
2
3
select  col1, max (decode(colnum,1,col2, null ))colA, max (decode(colnum,2,col2, null ))colB, max (decode(colnum,3,col2, null ))colC  from  (
select  col1,col2,row_number()over(partition  by  col1  order  by  col2)colnum  from  COL_TO_ROW 
) group  by  col1


再讲知识点
1、row_number()over(partition by col1 order by col2)colnum
通过col1字段进行分组,并组内编号
row_number() over ([partition by col1] order by col2) ) as 别名
表示根据col1分组,在分组内部根据 col2排序
而这个“别名”的值就表示每组内部排序后的顺序编号(组内连续的唯一的),[partition by col1] 可省略。关于该知识点的实例详解,可以进原作者空间看看:http://user.qzone.qq.com/362701082/blog/1322635025
2、max(decode(colnum,1,col2,null))colA
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值