【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以及动态行转列的更多相关文章

  1. java使用poi操作word, 支持动态的行(一个占位符插入多条)和表格中动态行, 支持图片

    依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifa ...

  2. 转:Oracle的列转行函数:LISTAGG()

    先看示例代码: with temp as( select 'China' nation ,'Guangzhou' city from dual union all select 'China' nat ...

  3. 文本聚合函数(wm_concat, listagg, group_concat, string_agg)

    实现目标   1.聚合文本   2.聚合文本(去重)   3.聚合文本(去重),按照指定字段排序   4.聚合文本(去重),按照指定字段排序,替换默认逗号分隔符 MySQL: group_concat ...

  4. Oracle行转列的函数

    --行转列的函数-- CREATE OR REPLACE FUNCTION Calvin( col IN VARCHAR2,dw IN VARCHAR2) RETURN VARCHAR2 IS ret ...

  5. Oracle列转行函数LISTAGG()

    --Oracle列转行函数LISTAGG() with tb_temp as( select 'China' 国家,'Wuhan' 城市 from dual union all select 'Chi ...

  6. Oracle列转行函数Listagg以及pivot查询示例

    简单的Oracle列转行函数Listagg示例: CREATE TABLE tbl_test (catalog VARCHAR(1),product VARCHAR(2),amount NUMBER) ...

  7. oracle中行转列、列转行函数

    多行转字符串 这个比较简单,用||或concat函数可以实现 select concat(id,username) str from app_user select id||username str ...

  8. Oracle列转行函数版本不兼容解决方案

    业务场景 本博客记录一下Oracle列转行函数在Oracle11的一些不兼容问题,vm_concat在一些业务场景是必须的.不过这个函数使用要谨慎,底层实现应该也是group by等等实现的,性能并不 ...

  9. [转]Oracle 分组聚合二种写法,listagg和wmsys.wm_concat

    本文转自:http://www.cnblogs.com/ycdx2001/p/3502495.html with temp as( select 'China' nation ,'Guangzhou' ...

  10. Oracle列转行函数使用

    一.业务场景 今天需要实现一个table,有一列的效果是:用户姓名A(账号a),用户姓名B(账号b)...这种格式.这就想到oracle的列转行函数vm_concat. 可以用类似这种格式wm_con ...

随机推荐

  1. 欢迎使用园子的 vscode 插件

    为了方便大家通过 vscode 编辑博文,我们做了一个小插件,插件名称是"博客园Cnblogs客户端",插件列表中搜索"博客园"或者 "cnblogs ...

  2. H.323详解

    H.323详解 文章中的某些图粘不上去,可到资源页下载word版点击打开链接 转载博客:https://blog.csdn.net/hemingliang1987/article/details/16 ...

  3. 关于 static

    由static定义的被称为类属性 例如(  static String company = "博客园"  ) 类方法 例如(  public static void printCo ...

  4. 企名片Js逆向思路

    企名片Js逆向思路 这个案例不算难,简单说一下思路. 目标链接:https://www.qimingpian.cn/finosda/project/pinvestment 网站更新了https://w ...

  5. BUG解决-Vscode/Sublime C++ 打印中文乱码问题

    #include <iostream> using namespace std; #ifdef _WIN32 #include <windows.h> #endif int m ...

  6. Go windows 环境搭建

    下载地址 官网下载地址:https://golang.google.cn/dl/ 1.下载完之后 双击msi进行安装 路径可以不用改, 继续next 安装完之后就需要配置环境变量, 找到环境变量 GO ...

  7. 代码打包的可视化数据分析图: webpack-bundle-analyzer 的使用

    先看webpack-bundle-analyzer的效果图(官方效果图): 通过使用webpack-bundle-analyzer可以看到项目各模块的大小,可以按需优化 1.先安装 npm insta ...

  8. 文心一言 VS chatgpt (4)-- 算法导论2.2 1~2题

    一.用O记号表示函数(n ^ 3)/1000-100(n^2)-100n十3. 文心一言: chatgpt: 可以使用大 O 记号表示该函数的渐进复杂度,即: f ( n ) = n 3 1000 − ...

  9. 2022-03-18:arr数组长度为n, magic数组长度为m 比如 arr = { 3, 1, 4, 5, 7 },如果完全不改变arr中的值, 那么收益就是累加和 = 3 + 1 + 4 +

    2022-03-18:arr数组长度为n, magic数组长度为m 比如 arr = { 3, 1, 4, 5, 7 },如果完全不改变arr中的值, 那么收益就是累加和 = 3 + 1 + 4 + ...

  10. Selenium - 元素操作(2) - 页面滚动条

    Selenium - 元素操作 函数滚动 一般元素定位,元素如果不在浏览器的可视位置(即可见只是不在可视位置),会自动把元素滚动到可视位置,但也有不会自己滚动的(比较少). 那我们就可以用seleni ...