当前位置: 代码网 > it编程>数据库>Oracle > Oracle多行数据合并为一行数据并将列数据转为字段名三种方式

Oracle多行数据合并为一行数据并将列数据转为字段名三种方式

2024年07月02日 Oracle 我要评论
实现查询效果原数据fzprojectvalue1电脑$16001手机$121导管$12电脑$22手机$22方式一:max()数据效果fz电脑手机导管1$1600$12$12$2$22sql根据fz字段

实现查询效果

原数据

fzprojectvalue
1电脑$1600
1手机$12
1导管$1
2电脑$2
2手机$22

方式一:max()

数据效果

fz电脑手机导管
1$1600$12$1
2$2$22

sql

根据fz字段筛选并分组,max支持字符内容,sun()同样支持,但是只能是数字类型。

select fz,
	max(case when project = '电脑' then value end) 电脑,
	max(case when project = '手机' then value end) 手机,
	max(case when project = '导管' then value end) 导管 
from table01 
group by fz

此方法没有数据库类型限制,mysql、oracle、达梦均可。

方式二:listagg()

数据效果

fzproject
1电脑,手机,导管

此方法仅仅是合并列内容,便于整合。

select fz,listagg(project,',') project 
from table01 
where fz = 1;

listagg函数是在oracle11g后新增的,是一个实现字符串聚合的内建函数。也可以实现行转列的功能,将某个字段的多行数据合并成一条。

用法说明:

  • listagg('需要拼接的数据表中的字段','分隔符') within group( order by '同前面,需要拼接的数据表中的字段')
  • 用法类似聚合函数,通过group by语句,把每个group的一个字段,拼接起来。

方式三:wm_concat()

数据效果

fzproject
1电脑,手机,导管
2电脑,手机

此方法与方法二相关相同,但适合于oracle数据库。

select fz,wm_concat(project,',') project 
from table01 
--where fz = 1
group by fz;

总结 

到此这篇关于oracle多行数据合并为一行数据并将列数据转为字段名的文章就介绍到这了,更多相关oracle多行数据合并一行数据内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com