Oracle行转列-列转行各种方式wm_concat函数、LISTAGG函数、PIVOT函数、UNPIVOT函数、非数字,以及自动动态获取要转换的列字段名(超详细)
1、上来先看下数据以及实现结果:
行转列(decode方式):
WITH CO_ORDER AS( SELECT 'DOM1' CUSTOMER, 'ZHA01' FACILITY , 4000 TEU FROM DUAL UNION ALL SELECT 'DOM1' CUSTOMER, 'ZHA01' FACILITY , 5000 TEU FROM DUAL UNION ALL SELECT 'DOM1' CUSTOMER, 'ZHA02' FACILITY , 9000 TEU FROM DUAL UNION ALL SELECT 'DOM1' CUSTOMER, 'ZHA03' FACILITY , 9000 TEU FROM DUAL UNION ALL SELECT 'DOM1' CUSTOMER, 'ZHA04' FACILITY , 4000 TEU FROM DUAL UNION ALL SELECT 'DOM2' CUSTOMER, 'ZHA01' FACILITY , 6500 TEU FROM DUAL UNION ALL SELECT 'DOM2' CUSTOMER, 'ZHA02' FACILITY , 6000 TEU FROM DUAL UNION ALL SELECT 'DOM2' CUSTOMER, 'ZHA03' FACILITY , 5000 TEU FROM DUAL UNION ALL SELECT 'DOM2' CUSTOMER, 'ZHA04' FACILITY , 3000 TEU FROM DUAL
)
SELECT T.CUSTOMER, SUM(DECODE(T.FACILITY, 'ZHA01', T.TEU)) AS ZHA01,SUM(DECODE(T.FACILITY, 'ZHA02', T.TEU)) AS ZHA02,SUM(DECODE(T.FACILITY, 'ZHA03', T.TEU)) AS ZHA03,SUM(DECODE(T.FACILITY, 'ZHA04', T.TEU)) AS ZHA04
FROM CO_ORDER T
GROUP BY T.CUSTOMER;
行转列(case when方式):
WITH CO_ORDER AS( SELECT 'DOM1' CUSTOMER, 'ZHA01' FACILITY , 4000 TEU FROM DUAL UNION ALL SELECT 'DOM1' CUSTOMER, 'ZHA01' FACILITY , 5000 TEU FROM DUAL UNION ALL SELECT 'DOM1' CUSTOMER, 'ZHA02' FACILITY , 9000 TEU FROM DUAL UNION ALL SELECT 'DOM1' CUSTOMER, 'ZHA03' FACILITY , 9000 TEU FROM DUAL UNION ALL SELECT 'DOM1' CUSTOMER, 'ZHA04' FACILITY , 4000 TEU FROM DUAL UNION ALL SELECT 'DOM2' CUSTOMER, 'ZHA01' FACILITY , 6500 TEU FROM DUAL UNION ALL SELECT 'DOM2' CUSTOMER, 'ZHA02' FACILITY , 6000 TEU FROM DUAL UNION ALL SELECT 'DOM2' CUSTOMER, 'ZHA03' FACILITY , 5000 TEU FROM DUAL UNION ALL SELECT 'DOM2' CUSTOMER, 'ZHA04' FACILITY , 3000 TEU FROM DUAL
)
SELECT CUSTOMER,SUM (CASE WHEN FACILITY = 'ZHA01' THEN TEU ELSE 0 END) AS ZHA01, SUM (CASE WHEN FACILITY = 'ZHA02' THEN TEU ELSE 0 END) AS ZHA02,SUM (CASE WHEN FACILITY = 'ZHA03' THEN TEU ELSE 0 END) AS ZHA03,SUM (CASE WHEN FACILITY = 'ZHA04' THEN TEU ELSE 0 END) AS ZHA04
FROM CO_ORDER GROUP BY CUSTOMER ORDER BY CUSTOMER;
行转列(PIVOT函数方式:)
WITH CO_ORDER AS( SELECT 'DOM1' CUSTOMER, 'ZHA01' FACILITY , 4000 TEU FROM DUAL UNION ALL SELECT 'DOM1' CUSTOMER, 'ZHA01' FACILITY , 5000 TEU FROM DUAL UNION ALL SELECT 'DOM1' CUSTOMER, 'ZHA02' FACILITY , 9000 TEU FROM DUAL UNION ALL SELECT 'DOM1' CUSTOMER, 'ZHA03' FACILITY , 9000 TEU FROM DUAL UNION ALL SELECT 'DOM1' CUSTOMER, 'ZHA04' FACILITY , 4000 TEU FROM DUAL UNION ALL SELECT 'DOM2' CUSTOMER, 'ZHA01' FACILITY , 6500 TEU FROM DUAL UNION ALL SELECT 'DOM2' CUSTOMER, 'ZHA02' FACILITY , 6000 TEU FROM DUAL UNION ALL SELECT 'DOM2' CUSTOMER, 'ZHA03' FACILITY , 5000 TEU FROM DUAL UNION ALL SELECT 'DOM2' CUSTOMER, 'ZHA04' FACILITY , 3000 TEU FROM DUAL
)
SELECT * FROM (SELECT T.CUSTOMER, T.FACILITY, SUM(TEU) EU FROM CO_ORDER T GROUP BY T.CUSTOMER, T.FACILITY) T
PIVOT(SUM(T.EU) FOR FACILITY IN ('ZHA01', 'ZHA02', 'ZHA03', 'ZHA04'));
行转列(WM_CONCAT函数方式:)
WITH CO_ORDER AS( SELECT 'DOM1' CUSTOMER, 'ZHA01&
Oracle行转列-列转行各种方式wm_concat函数、LISTAGG函数、PIVOT函数、UNPIVOT函数、非数字,以及自动动态获取要转换的列字段名(超详细)相关推荐
- oracle列转行查询,Oracle列转行函数Listagg以及pivot查询示例
简单的Oracle列转行函数Listagg示例: CREATE TABLE tbl_test (catalog VARCHAR(1),product VARCHAR(2),amount NUMBER) ...
- oracle unpivot 索引_oracle pivot 和 unpivot 函数的使用
pivot的格式 select from ( inner_query) pivot(aggreate_function for pivot_column in ( list of values)) o ...
- oracle povit,oracle pivot 和 unpivot 函数的使用
pivot的格式 select from ( inner_query) pivot(aggreate_function for pivot_column in ( list of values)) o ...
- oracle数据库中unpivot函数,oracle pivot 和 unpivot 函数的使用
pivot的格式 select from ( inner_query) pivot(aggreate_function for pivot_column in ( list of values)) o ...
- oracle行转列和列转行,oracle行转列和列转行(pivot 和 unpivot 函数,wm_concat函数 )...
create table demo(id int,name varchar(20),nums int); ---- 创建表 insert into demo values(1, '苹果', 1000) ...
- oracle列传行函数,oracle行转列和列转行(pivot 和 unpivot 函数,wm_concat函数 )
create table demo(id int,name varchar(20),nums int); ---- 创建表 insert into demo values(1, '苹果', 1000) ...
- uni-app - 文本展开 / 收起折叠功能,支持自定义样式(当文本内容超出规定行数后,展开收起折叠的功能)兼容 H5 / App / 小程序且易用更容易修改的插件组件源码,超详细的示例代码及注释
前言 网上的组件和教程代码都太乱了,根本无法按照自己的需求修改,而且基本上都有兼容性和功能性 BUG. 本文实现了 多行文本展开与折叠组件,灵活性非常高,只完成了核心功能,可随意自定义样式满足您的需求 ...
- oracle 动态sql列转行_Oracle 行转列 动态出转换的列
10月的第二天,前天写了个Oracle中行转列的pivot的基本使用方法,然后,因为pivot的用法中,正常情况下,我们需要转出多少个列,都得在我们的sql中完完整整地写出,而不能直接在里面写个查询来 ...
- Oracle SQL 行转列,pivot函数和unpivot函数
转:Oracle行转列,pivot函数和unpivot函数 - waynelo - 博客园 (cnblogs.com) pivot函数:行转列函数: 语法:pivot(任一聚合函数 for 需专列的值 ...
- Oracle 行转列 动态出转换的列
10月的第二天,前天写了个Oracle中行转列的pivot的基本使用方法,然后,因为pivot的用法中,正常情况下,我们需要转出多少个列,都得在我们的sql中完完整整地写出,而不能直接在里面写个查询来 ...
最新文章
- MYSQL启用日志,查看日志,利用mysqlbinlog工具恢复MySQL数据库
- 『创建型』简单工厂SimpleFactory、工厂方法FactoryMethod、抽象工厂AbstractFactory
- java和C++的区别
- idea 新建的java项目没发run_IDEA 如何创建一个普通的 Java 项目,及创建 Java 文件并运行...
- 为什么各大银行一直在不遗余力推广信用卡呢?
- Java程序员必备:异常的十个关键知识点
- linux读取stm32唯一识别码,STM32HAL内部识别码,全球唯一识别码,UID读取
- 【毕业设计选题】C51单片机毕业设计题目推荐大全
- 面试中常被问到(七)封装继承多态知多少
- 英汉汉英词典,牛津高级词典,电子词典,离线英汉,汉英词典的使用方法
- 流体力学基础——粘性
- [电路]3-基尔霍夫定律
- 转载和积累系列 - L4负载均衡的设计与实现
- 斯嘉丽约翰逊60张pdf什么时间的?_什么叫美丽与演技并存?
- WPF的Prism框架简介
- 计算机与科技课题题目,新颖的计算机科学技术专业论文选题 计算机科学技术专业论文题目选什么比较好...
- 墨西哥区域相关的西班牙语日期的处理方案。。
- av_interleaved_write_frame(fmt_ctx, enc_pkt);返回-22
- 电脑桌面图标变成蓝色的怎么办
- SVG滤镜+阴影+渐变--学习笔记
热门文章
- 分析了1011个程序员的裁员情况后得出的启示
- 为什么不推荐用汇编语言编写GUI应用程序 From Eggache_man
- 程序人生 - 汽车店为什么叫“4S”?
- Windows Server 2016正式版14393英文版ISO镜像下载:_X64FRE_ZH-CN.ISO
- 武理MOOC课程《认识武理》单元测验答案
- ​多模态系统下软体机械手对多种意图的精准实时控制
- PAT A1001 A+B Format 巧妙解题方法
- 输出9*9乘法口诀表
- 智能手机都在抓年轻人,荣耀的方法论特别在哪里?
- 支持arcface 2.0 最新版 Java离线人脸识别SDK