【Oracle】行转列的函数wm_concat,listagg,xmlagg,pivot以及动态行转列
【Oracle】行转列的几种情况
表的数据如下

朴实无华的函数
1.wm_concat
使用格式:
select 分组字段,wm_concat(要转换的列名) from 表名 group by 分组字段
实例:
select it.Code,wm_concat(it.inv) from ttt20230705 it group by it.Code

2.listagg() within group()
使用格式:
select 分组字段,listagg(要转换的列名,',') within group(order by 要转换的列名) from 表名 group by 分组字段
实例:
select it.Code,listagg(it.inv,',') within group(order by it.inv) from ttt20230705 IT group by it.Code

3.xmlagg
本质就是listagg加强版,详情见这里
4.pivot(本质还是case when)
使用格式:
select * from 表名 pivot(聚合函数(转换的字段名) for Code in (转换的值1 AS 字段名1,转换的值2 AS 字段名2,转换的值3 AS 字段名3));
实例:
select * from ttt20230705 pivot(listagg(inv,',') for Code in ('AA' AS AA,'BB' AS BB,'CC' AS CC));

动态行转列(行固定)
基本思路就是使用存储过程对SQL进行拼接,通过执行SQL对数据查询出来,然后将数据做成表或者视图,然后查询出来
参考这个
动态行转列(行不固定)
这种是什么意思呢,就是我现在遇到的问题
在这五个表中的数据各有关联,可以连表对某个类别的数据属性进行查询,但是问题就在于,同一个大类下的所有小类各有各的属性,可能上一个属性名是备注的位置,下一个类别的对应位置属性名就是走向,且大部分都是不一样的,也就形成了,一个类别对应多个子类别,每个子类别对应多个属性名,每个属性名对应每个属性数据,但是存储属性名和属性数据的表数据内容并不是一样的,这就导致,可能我行转列出来的数据是一团乱麻,没有价值
这种情况,最后的解决方法就只有最暴力的枚举了,对每个查询出来的属性名和数据单独再查询一次,才能保证每个数据都是对的,即
select
(select it.name from table2 it where it.a = t.a),
(select it.name from table2 it where it.a = t.b),
(select it.name from table2 it where it.a = t.c),
(select iit.data from table3 iit where iit.a = t.a),
(select iit.data from table3 iit where iit.a = t.b),
(select iit.data from table3 iit where iit.a = t.ab),
from table1 t
【Oracle】行转列的函数wm_concat,listagg,xmlagg,pivot以及动态行转列的更多相关文章
- java使用poi操作word, 支持动态的行(一个占位符插入多条)和表格中动态行, 支持图片
依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifa ...
- 转:Oracle的列转行函数:LISTAGG()
先看示例代码: with temp as( select 'China' nation ,'Guangzhou' city from dual union all select 'China' nat ...
- 文本聚合函数(wm_concat, listagg, group_concat, string_agg)
实现目标 1.聚合文本 2.聚合文本(去重) 3.聚合文本(去重),按照指定字段排序 4.聚合文本(去重),按照指定字段排序,替换默认逗号分隔符 MySQL: group_concat ...
- Oracle行转列的函数
--行转列的函数-- CREATE OR REPLACE FUNCTION Calvin( col IN VARCHAR2,dw IN VARCHAR2) RETURN VARCHAR2 IS ret ...
- Oracle列转行函数LISTAGG()
--Oracle列转行函数LISTAGG() with tb_temp as( select 'China' 国家,'Wuhan' 城市 from dual union all select 'Chi ...
- Oracle列转行函数Listagg以及pivot查询示例
简单的Oracle列转行函数Listagg示例: CREATE TABLE tbl_test (catalog VARCHAR(1),product VARCHAR(2),amount NUMBER) ...
- oracle中行转列、列转行函数
多行转字符串 这个比较简单,用||或concat函数可以实现 select concat(id,username) str from app_user select id||username str ...
- Oracle列转行函数版本不兼容解决方案
业务场景 本博客记录一下Oracle列转行函数在Oracle11的一些不兼容问题,vm_concat在一些业务场景是必须的.不过这个函数使用要谨慎,底层实现应该也是group by等等实现的,性能并不 ...
- [转]Oracle 分组聚合二种写法,listagg和wmsys.wm_concat
本文转自:http://www.cnblogs.com/ycdx2001/p/3502495.html with temp as( select 'China' nation ,'Guangzhou' ...
- Oracle列转行函数使用
一.业务场景 今天需要实现一个table,有一列的效果是:用户姓名A(账号a),用户姓名B(账号b)...这种格式.这就想到oracle的列转行函数vm_concat. 可以用类似这种格式wm_con ...
随机推荐
- HTTP.sys漏洞的检测和修复(附补丁包下载)
关于这个 HTTP.sys 漏洞,查了一些资料,没有一个写的比较全的,下面我来整理下. 这个漏洞主要存在Windows+IIS的环境下,任何安装了微软IIS 6.0以上的Windows Server ...
- 【LeetCode回溯算法#extra01】集合划分问题【火柴拼正方形、划分k个相等子集、公平发饼干】
火柴拼正方形 https://leetcode.cn/problems/matchsticks-to-square/ 你将得到一个整数数组 matchsticks ,其中 matchsticks[i] ...
- CommunityToolkit.Mvvm系列文章导航
包 CommunityToolkit.Mvvm (又名 MVVM 工具包,以前名为 Microsoft.Toolkit.Mvvm) 是一个现代.快速且模块化的 MVVM 库. 它是 .NET 社区工具 ...
- Docker认识、Docker安装
一.免费版和企业版 Docker-CE指Docker社区版,由社区维护和提供技术支持,为免费版本,适合个人开发人员和小团队使用. Docker-EE指Docker企业版,为收费版本,由售后团队和技术团 ...
- 3.1 JAVA方法:
JAVA方法: 何为方法 方法是语句的集合,这个集合执行一个功能 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 java全是值传递 方法的定义和调用 方法的定义: 修饰符 返回类型 方法 ...
- C# 几种获取电脑内存、CPU信息的方案
计数器.WMI 获取设备的内存信息,如系统可用运行内存: 1 public static async Task<double> GetMemoryAvailableAsync(FileSi ...
- MySQL-分组函数ROLLUP的基本用法
一.ROLLUP简介 ROLLUP是GROUP BY子句的扩展. ROLLUP选项允许包含表示小计的额外行,通常称为超级聚合行,以及总计行. 通过使用ROLLUP选项,可以使用单个查询生成多个分组集. ...
- PaddlePaddle 自动求导
自动求导 在 PaddlePaddle 中使用自动求导来计算导数. 要求:$ f(x)=\sin{x} $,绘制 \(f(x)\) 和 \(\dfrac{\mathrm{d}f(x)}{\mathrm ...
- 2022-12-23:portainer是docker的web可视化工具。如果根据docker部署去写yaml,默认local是k8s,而不是docker,这不符合需求,需要修改yaml。请问部署在
2022-12-23:portainer是docker的web可视化工具.如果根据docker部署去写yaml,默认local是k8s,而不是docker,这不符合需求,需要修改yaml.请问部署在 ...
- 2022-12-21:uifd/ui-for-docker是docker的web可视化工具。请问部署在k3s中,yaml文件如何写?
2022-12-21:uifd/ui-for-docker是docker的web可视化工具.请问部署在k3s中,yaml文件如何写? 答案2022-12-21: yaml如下: apiVersion: ...