oracle中行转列LISTAGG()函数详解及应用实例

 更新时间:2024年05月27日 09:18:08   作者:sym@12  
这篇文章主要给大家介绍了关于oracle中行转列LISTAGG()函数详解及应用实例的相关资料,stagg是oracle11.2增加的特性,功能类似wmsys.wm_concat函数,即将数据分组后,把指定列的数据通过指定符号合并,需要的朋友可以参考下

1.LISTAGG()函数作为普通函数使用时就是查询出来的结果列转为行

SELECT
	LISTAGG ( NAME_CHS, ',' ) within GROUP ( ORDER BY ROWNUM ) name 
FROM
	GSPUSER 
WHERE
	ROWNUM <= 10

2.LISTAGG()作为分组函数使用

例如,把每个班组下面的人员拼接成一行

SELECT
	b.MOMTEAMNAME,
	LISTAGG ( g.NAME_CHS, ',' ) WITHIN GROUP ( ORDER BY b.MOMTEAMNAME ) res
FROM
	DGMOMPTDGMOMGLHQYBZGL b 
	LEFT JOIN DGMOMPTABOUTUSERS u ON b.ID = u.PARENTID 
	LEFT JOIN GSPUSER g ON u.MOMEMPLOYEEID = g.ID 
WHERE
	b.MOMDATASTATE = 0 
	AND u.MOMDATASTATE = 0 
GROUP BY
	b.MOMTEAMNAME

3.LISTAGG()做分析函数使用

例如,查询每个班组下面有哪些人,统计每组人数量

SELECT
    MOMTEAMNAME,RES,COUNT
FROM(	
 SELECT
	b.MOMTEAMNAME,
	LISTAGG ( g.NAME_CHS, ',' ) WITHIN GROUP ( ORDER BY b.MOMTEAMNAME ) over(partition by b.MOMTEAMNAME) res,
	count(g.NAME_CHS) over(partition by b.MOMTEAMNAME) count,
	row_number() over(partition by b.MOMTEAMNAME ORDER BY ROWNUM) rn
FROM
	DGMOMPTDGMOMGLHQYBZGL b 
	LEFT JOIN DGMOMPTABOUTUSERS u ON b.ID = u.PARENTID 
	LEFT JOIN GSPUSER g ON u.MOMEMPLOYEEID = g.ID 
WHERE
	b.MOMDATASTATE = 0 
	AND u.MOMDATASTATE = 0 
) WHERE rn = 1

附:高级用法

listagg(XXX,’,’) within GROUP (order by XXX) over (partition by XXX) rank

示例

with temp as(  
select 500 population, '中国' nation ,'江苏' city from dual union all  
select 1500 population, '中国' nation ,'上海' city from dual union all  
select 500 population, '中国' nation ,'北京' city from dual union all  
select 1000 population, '美国' nation ,'纽约' city from dual union all  
select 500 population, '美国' nation ,'波士顿' city from dual union all  
select 500 population, '日本' nation ,'东京' city from dual   
)  
select population,  
nation,  
city,  
listagg(city,',') within GROUP (order by city) over (partition by nation) rank  
from temp复制

运行结果

总结 

到此这篇关于oracle中行转列LISTAGG()函数详解及应用实例的文章就介绍到这了,更多相关oracle行转列LISTAGG()内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 运行在容器中的Oracle XE-11g

    运行在容器中的Oracle XE-11g

    今天小编就为大家分享一篇关于运行在容器中的Oracle XE-11g,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • Oracle SQL性能优化系列学习一

    Oracle SQL性能优化系列学习一

    Oracle SQL性能优化系列学习一...
    2007-03-03
  • 一文详解Oracle如何停止正在运行的Job

    一文详解Oracle如何停止正在运行的Job

    Oracle Job是Oracle数据库中的一个核心特性,用于在预定义的时间执行特定的数据库任务,比如运行SQL脚本、数据备份、维护或性能监控等,这篇文章主要介绍了Oracle如何停止正在运行Job的相关资料,需要的朋友可以参考下
    2025-09-09
  • ORACLE数据库中Rownum用法详解

    ORACLE数据库中Rownum用法详解

    这篇文章主要介绍了ORACLE数据库中ROWNUM用法详解,对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,且rownum不能以任何表的名称作为前缀,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Oracle 数据仓库ETL技术之多表插入语句的示例详解

    Oracle 数据仓库ETL技术之多表插入语句的示例详解

    Oracle 数据库为 ETL 流程提供了丰富的功能,今天我们就给大家介绍一下 Oracle 多表插入语句,也就是 INSERT ALL 语句,今天通过示例代码给大家介绍Oracle 数据仓库 ETL 技术之多表插入语句的相关知识,感兴趣的朋友一起看看吧
    2021-04-04
  • 实例讲解临时处理去重 80w 数据时夯死现象

    实例讲解临时处理去重 80w 数据时夯死现象

    这篇文章主要介绍了临时处理去重 80w 数据时夯死现象,需要的朋友可以参考下
    2015-09-09
  • Linux上oracle的安装部署与查询使用过程

    Linux上oracle的安装部署与查询使用过程

    本文介绍了在Linux环境下安装和配置Oracle数据库的步骤,包括环境准备、主机配置、用户和权限设置、环境变量配置、数据库安装及基本查询操作,帮助开发者快速部署和使用Oracle数据库
    2025-10-10
  • oracle使用sql脚本生成csv文件案例学习

    oracle使用sql脚本生成csv文件案例学习

    在oracle中用sql脚本生成csv文件,很多的朋友都想实现这样的功能,所以本文的出现是很有必要的,感兴趣的你可千万不要错过,希望本文可以帮助到你
    2013-02-02
  • Oracle数仓中判断时间连续性的几种SQL写法示例

    Oracle数仓中判断时间连续性的几种SQL写法示例

    这篇文章主要给大家介绍了关于Oracle数仓中判断时间连续性的几种SQL写法,文中通过实例代码介绍的非常详细,对大家学习或者使用Oracle具有一定的参考学习价值,需要的朋友可以参考下
    2023-02-02
  • Oracle 中 decode 函数用法

    Oracle 中 decode 函数用法

    这篇文章主要介绍了Oracle 中 decode 函数用法的相关资料,需要的朋友可以参考下
    2017-10-10

最新评论