十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
select to_char(wm_concat(name)) from tablename
创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都网站制作、成都网站建设、外贸营销网站建设、金水网络推广、成都微信小程序、金水网络营销、金水企业策划、金水品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供金水建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com
使用wm_concat函数将列转化成行,使用逗号分割。最后转化成字符串
需要用wm_concat将各字段连接。
如,test表中有如下数据:
现要将name字段连接,显示在一行,可用如下语句:
select wm_concat(name) from test;
结果:
这是个行列转换的问题,只是你这个例子test样表,是行固定还是列固定?还是不定行不定列?这些情况都有不同的写法。定行或者定列的话就直接用decode(),或者case when ...等等直接判断列名称,或者构造一个伪劣用rownum.方法网上很多,你直接查找‘oracle 行列转换’即可。最难写的就是不定行,不定列的情况,如果是那样就得写动态SQL了,或者写存储过程,或者写函数,代码块也行,总之一条语句或许可以实现,但是太复杂。
Oracle 提供了两个函数wmsys.wm_concat 和 LISTAGG函数。
wmsys.wm_concat是Oracle 10g推出的,用来连接字符串,wmsys.wm_concat()中的参数也可以使多个,使用”||”拼接,如下例子:select deptno,wmsys.wm_concat(ename || '-' || job) name from emp group by deptno;
LISTAGG是Oracle 11g推出的,它的作用和wmsys.wm_concat是一样。基础语法:LISTAGG(XXX,XXX) WITHIN GROUP( ORDER BY XXX)。用法就像聚合函数一样,通过Group by语句,把每个Group的一个字段,拼接起来。非常方便。
同样是聚合函数,还有一个高级用法:就是over(partition by XXX),也就是说,在你不使用Group by语句时候,也可以使用LISTAGG函数:
使用实例:
结果:
1:set hea off。
2:set linesize 50行设置短一些。
3:set wrap on让sqlplus自动换行。
1:Oracle Database[1]是甲骨文公司的一款关系数据库管理系统。到目前仍在数据库市场上占有主要份额。作为一个通用的数据库系统,它具有完整的数据管理功能。
2:作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。但它的所有知识,只要在一种机型上学习了ORACLE知识,便能在各种类型的机器上使用。
3:系统具有:可用性强、可扩展性强、数据安全性强、稳定性强等优点。