sql行转列

在实际的业务开发过程当中,会碰到oracle表数据默写列数据转换成一行如用逗号分隔,常常会碰到。

有张表 cardInof

type             tel
---------    ----------   
11               aa
11               bb
11               cc
22               ee
22               sd
 
用一条sql语句转换成如下格式
 
type                tel
--------       ----------------------
11                   aa,bb,cc
22                   ee,sd
 
这里是数据
 
create table CARDINFO
(
  type VARCHAR2(5),
  TEL  VARCHAR2(5)
)
;
执行数据的插入
insert into CARDINFO (type, TEL)
values ('11', 'aa');
insert into CARDINFO (type, TEL)
values ('11', 'bb');
insert into CARDINFO (type, TEL)
values ('11', 'cc');
insert into CARDINFO (type, TEL)
values ('22', 'dd');
insert into CARDINFO (type, TEL)
values ('22', 'sd');
commit;
 
 

SQL>
SQL> SELECT type, MAX(Substr(Sys_Connect_By_Path(TEL, ','), 2)) ret
  2    FROM (SELECT type, TEL, row_number() over(PARTITION BY type ORDER BY TEL) rn FROM CARDINFO)
  3   START WITH rn = 1
  4  CONNECT BY PRIOR rn = rn - 1
  5         AND PRIOR type= type
  6   GROUP BY type
  7   ORDER BY type
  8  /
 
type SCBP
----- --------------------------------------------------------------------------------
11    aa,bb,cc
22    dd,sd

 

还可以使用oracle那边的函数实现如上的功能

利用函数包来完成wmsys.wm_concat
select type,wmsys.wm_concat(tel) from t group by type;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值