ORACLE行转列、列转行实现方式及案例

ORACLE行转列、列转行实现方式及案例

  • 行转列
    • 案例
    • 方式1.PIVOT
    • 方式2.MAX和DECODE
    • 方式3.CASE WHEN和GROUP BY
  • 列转行
    • 案例
    • 方式1.UNPIVOT
    • 方式2.UNION ALL

行转列

案例

假设我们有一个名为sales的表,其中包含了产品销售数据。表中有三列:product(产品名称)、year(年份)和amount(销售额)。表中的数据如下:
在这里插入图片描述
将这个表中的数据进行行转列,使得每一行表示一个产品,每一列表示一年的销售额。
使得得到以下结果:
在这里插入图片描述

方式1.PIVOT

PIVOT是Oracle 11g之后引入的一种用于行列转换的函数。它可以将查询结果中的行数据转换为列数据,从而实现行列转换。PIVOT函数的基本语法如下:

SELECT ...
FROM ...
PIVOT (aggregate_function(column_to_aggregate)FOR column_to_pivotIN (list_of_values))

其中,aggregate_function是一个聚合函数,如SUM、MAX、MIN等;column_to_aggregate是要进行聚合的列;column_to_pivot是要进行行列转换的列;list_of_values是要转换为列的值的列表。

实现案例所示效果可以通过如下方式:

SELECT *
FROM sales
PIVOT (SUM(amount) FOR year IN (2018, 2019, 2020));

方式2.MAX和DECODE

DECODE 可以根据条件返回不同的值。DECODE 函数的基本语法如下:

DECODE(expression, search1, result1,search2, result2, ..., default)

其中,expression 是要进行比较的表达式;search1、search2 等是要进行比较的值;result1、result2 等是当表达式与对应的搜索值相等时返回的结果;default 是当表达式与所有搜索值都不相等时返回的默认值。

若要实现案例的效果可以通过以下方式:

SELECT product,MAX(DECODE(year, 2018, amount)) AS "2018",MAX(DECODE(year, 2019, amount)) AS "2019",MAX(DECODE(year, 2020, amount)) AS "2020"
FROM sales
GROUP BY product;

注意:这里取的是每年数据的最大值,每年每产品指只会一条,而方式3是取总和

方式3.CASE WHEN和GROUP BY

SELECT product,SUM(CASE WHEN year = 2018 THEN amount END) AS "2018",SUM(CASE WHEN year = 2019 THEN amount END) AS "2019",SUM(CASE WHEN year = 2020 THEN amount END) AS "2020"
FROM sales
GROUP BY product;

注意:这里取的是每年数据的总和,每年每产品的总和,而方式2是取最大的一条

列转行

案例

与行转列的案例相反假设我们有一个名为sales的表,其中包含了产品销售数据。表中有四列:product(产品名称)、2018(2018年销售额)、2019(2019年销售额)和2020(2020年销售额)。表中的数据如下:
在这里插入图片描述
现在我们想要将这个表中的数据进行列转行,使得每一行表示一个产品在某一年的销售额。
实现效果如下:
在这里插入图片描述

方式1.UNPIVOT

UNPIVOT是Oracle中用于实现列转行的函数,基本语法如下:

SELECT ...
FROM ...
UNPIVOT (column_to_unpivotFOR new_column_nameIN (list_of_columns))

其中,column_to_unpivot是要进行列转行的列;new_column_name是新生成的列的名称;list_of_columns是要转换为行的列的列表。

实现案例中的结果可以用如下方式:

SELECT *
FROM sales
UNPIVOT (amount FOR year IN ("2018", "2019", "2020"));

方式2.UNION ALL

SELECT product, '2018' AS year, "2018" AS amount FROM sales
UNION ALL
SELECT product, '2019' AS year, "2019" AS amount FROM sales
UNION ALL
SELECT product, '2020' AS year, "2020" AS amount FROM sales;

注意:单引号表示的是固定字符2018即字段名2018,双引号表示字段2018下的值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/66609.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

六轴机械臂码垛货物堆叠仿真

六轴机械臂码垛货物堆叠仿真 1、建立模型与仿真 clear,clc,close all addpath(genpath(.)) %建立模型参数如下: L(1) Link( d, 0.122, a , 0 , alpha, pi/2,offset,0); L(2) Link( d, 0.019 , a ,0.408 , alpha, 0,offset,pi/2); L(3) Link( d, …

汇编指令练习

1.大小比较(循环) start: /*mov r0,#0x9mov r1,#0xfb LoopLoop:cmp r0,r1beq stopsubhi r0,r0,r1subcc r1,r1,r0b Loop stop:b stop.end 仿真图 2. 1到100之和 start:mov r0,#0x1mov r1,#0x0b sum sum:add r1,r1,r0add r0,r0,#0x1cmp r0,#0x65beq sto…

HarmonyOS NEXT新能力,一站式高效开发HarmonyOS应用

2023年8月6日华为开发者大会2023(HDC.Together)圆满收官,伴随着HarmonyOS 4的发布,华为向开发者发布了汇聚所有最新开发能力的HarmonyOS NEXT开发者预览版,并分享了围绕“一次开发,多端部署” “可分可合&a…

k8s service

1、认识Service 程序在容器中、容器在Pod中,可以通过pod的ip来访问应用程序,但是podIP会随着创建销毁而改变。由此,Service出现: Service会对提供同一个服务的多个pod进行聚合,并且提供一个统一的入口地址。通过访问…

new BigDecimal(double val)注意事项 / JWT解析BigDecimal类型数据

前言: 公司项目中有一个板块需要解析JWT令牌获取载荷里面封装的数据,遇到要解析一个BigDecimal类型的数据 问题发现过程: 正常来说,我们解析一个JWT令牌的步骤如下: public static Claims getDataFromToken(String tok…

探索 C++ 标准库:std::string 库函数用法示例

目录 引言 一、构造函数 1.1 string() 1.2 string (const string& str) 1.3 string (const string& str, size_t pos, size_t len npos) 1.4 string (const char* s) 1.5 string (const char* s, size_t n) 1.6 string (size_t n, char c)​ 二、容…

EasyPoi导出 导入(带校验)简单示例 EasyExcel

官方文档 : http://doc.wupaas.com/docs/easypoi pom的引入: <!-- easyPoi--><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><version>4.0.0</version></dep…

Grounding DINO:根据文字提示检测任意目标

文章目录 1. 背景介绍2. 方法创新2.1 Feature Extraction and Enhancer2.2 Language-Guided Query Selection2.3 Cross-Modality Decoder2.4 Sub-Sentence Level Text Feature2.5 Loss Function3. 实验结果3.1 Zero-Shot Transfer of Grounding DINO3.2 Referring Object Detec…

远程运维大批量IT设备?向日葵批量部署、分组授权与安全功能解析

数字化转型的不断推进&#xff0c;给予了企业全方位的赋能&#xff0c;但任何发展都伴随着成本与代价&#xff0c;比如在数字化转型过程中企业内部办公与外部业务所需的不断增加的IT设备数量&#xff0c;就为日常的运维工作提出了更大的挑战。 针对企业面对海量IT设备时的运维…

NAS搭建指南一——服务器的选择与搭建

一、服务器的选择 有自己的本地的公网 IP 的请跳过此篇文章按需求选择一个云服务器&#xff0c;目的就是为了进行 frp 的搭建&#xff0c;完成内网穿透我选择的是腾讯云服务器&#xff0c;我的配置如下&#xff0c;仅供参考&#xff1a; 4. 腾讯云服务器官网地址 二、服务器…

Nginx负载均衡以及keepalived高可用实验

Vip 10.1.122 Keepalived-master 10.1.1.132Keepalied-backup 10.1.1.133Realserver_1 10.1.1.136Realserver_2 10.1.1.137 四台机器上安装nginx&#xff0c;编译安装的话需要另外安装pcre包支持&#xff0c;安装在/usr/local/nginx Keepalived-master 和backu…

多维时序 | MATLAB实现ZOA-CNN-BiGRU-Attention多变量时间序列预测

多维时序 | MATLAB实现ZOA-CNN-BiGRU-Attention多变量时间序列预测 目录 多维时序 | MATLAB实现ZOA-CNN-BiGRU-Attention多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.Matlab基于ZOA-CNN-BiGRU-Attention斑马优化卷积双向门控循环单元网络…