oracle行转列方法集合汇总(推荐!)

作者:大毛发沙海 时间:2024-01-12 19:42:14 

wm_concat、listagg、xmlagg、pivot函数

一、wm_concat函数(oracle12g版本开始不支持)

语法:

select 需要分组的字段,wmsys.wm_concat(distinct 需要行转列合并展示的字段) from 表名 group by 需要分组的字段;

实战:查询各年级涉及的班级,多个班级默认用“,”隔开按一行合并展示。

select * from CLASS_STATISTICS;

oracle行转列方法集合汇总(推荐!)

select GRADE,wmsys.wm_concat(distinct CLASS) from CLASS_STATISTICS group by GRADE;

oracle行转列方法集合汇总(推荐!)

二、listagg函数

语法:

select 需要分组的字段,listagg(需要行转列合并展示的字段,';')within group(order by 需要行转列合并展示的字段) from 表名 group by 需要分组的字段;

实战:查询各年级涉及的班级,多个班级用“;”隔开按一行合并展示。

select GRADE,listagg(CLASS,';')within group(order by CLASS) from CLASS_STATISTICS group by GRADE;

oracle行转列方法集合汇总(推荐!)

将group by换成over(partition by),不会去重

select GRADE,listagg(CLASS,';')within group(order by CLASS) over(partition by GRADE) from CLASS_STATISTICS;

oracle行转列方法集合汇总(推荐!)

三、xmlagg函数(解决listagg函数字符串拼接过长问题)

语法:

select 需要分组的字段,xmlagg(xmlparse(content 需要行转列合并展示的字段||';' wellformed) order by 需要行转列合并展示的字段).getclobval() from 表名 group by 需要分组的字段;

实战:查询各年级涉及的班级,多个班级用“;”隔开按一行合并展示。

select GRADE,xmlagg(xmlparse(content CLASS||';' wellformed) order by CLASS).getclobval() from CLASS_STATISTICS group by GRADE;

oracle行转列方法集合汇总(推荐!)

使用rtrim(字段名,'字符'),去掉结尾多出来的“;”

select GRADE,rtrim(xmlagg(xmlparse(content CLASS||';' wellformed) order by CLASS).getclobval(),';') from CLASS_STATISTICS group by GRADE;

oracle行转列方法集合汇总(推荐!)

使用dbms_lob.substr(字段名,截取字段长度,从第几位开始截取),将大字段clob字段转换为字符串展示

select GRADE,dbms_lob.substr(rtrim(xmlagg(xmlparse(content CLASS||';' wellformed) order by CLASS).getclobval(),';'),1000,1) from CLASS_STATISTICS group by GRADE;

oracle行转列方法集合汇总(推荐!)

四、pivot函数(拆分列)

语法:

select * from 表名 pivot(聚合函数(需要按行展示的字段) for 需要转列展示的字段 in ('内容1' AS 字段别名1,'内容2' AS 字段别名2,'内容n' AS 字段别名n));

实战:将年级按列展示其学生人数。

select * from GRADE_STATISTICS;

oracle行转列方法集合汇总(推荐!)

select * from GRADE_STATISTICS pivot(sum(STUDENTS_CNT) for GRADE in ('一年级' AS 一年级,'二年级' AS 二年级,'三年级' AS 三年级,'四年级' AS 四年级));

oracle行转列方法集合汇总(推荐!)

来源:https://blog.csdn.net/weixin_40543389/article/details/127384313

标签:oracle,行转列
0
投稿

猜你喜欢

  • python基于moviepy实现音视频剪辑

    2023-08-21 14:56:47
  • Python装饰器详情

    2021-10-22 07:22:49
  • Python实现将Word表格嵌入到Excel中

    2022-02-10 06:21:49
  • Django的基本运用之Django垃圾分类详解

    2022-02-02 01:46:13
  • MySQL(win7x64 5.7.16版本)下载、安装、配置与使用的详细图文教程

    2024-01-27 01:12:32
  • mysql中count(), group by, order by使用详解

    2024-01-26 00:48:11
  • pycharm开发一个简单界面和通用mvc模板(操作方法图解)

    2022-10-09 06:28:39
  • python socket多线程通讯实例分析(聊天室)

    2022-11-21 13:18:58
  • 标签明晰、有效

    2010-01-18 12:22:00
  • MySQL字符编码设置方法

    2024-01-21 07:52:51
  • 利用Python多线程实现图片下载器

    2022-02-12 06:07:41
  • Python return语句如何实现结果返回调用

    2021-06-06 21:13:51
  • 用 Python 写的文档批量翻译工具效果竟然超出想象

    2022-02-10 08:38:51
  • Python中unittest用法实例

    2023-09-02 13:13:45
  • Python读取excel中的图片完美解决方法

    2022-06-07 09:57:18
  • Golang实现请求限流的几种办法(小结)

    2024-05-05 09:32:09
  • MySQL中varchar和char类型的区别

    2024-01-22 22:36:05
  • Go简单实现协程池的实现示例

    2024-02-19 07:35:16
  • javascript自定义函数参数传递为字符串格式

    2024-04-22 13:08:18
  • python中验证码连通域分割的方法详解

    2022-09-30 11:04:00
  • asp之家 网络编程 m.aspxhome.com