oracle行转列、列转行

Oracle 行转列和列转行 场景 在生成报表的时候,很多时候对某列取值固定或者有限的几个值时,进行转列分析。如下: facility列取值只有四种,每种一列,遇到相同facility求和。如下图: 实现方式 DECODE 利用DECODE函数、聚合函数SUM、GROUP BY分组实现。 WITH CO_ORDER AS( SELECT 'DOM1' Customer, 'ZHA01' fa 阅读详情

问题:假设有张学生成绩表(tb)如下:
姓名 课程 分数
张三 语文 74
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94
想变成(得到如下结果):
姓名 语文 数学 物理
---- ---- ---- ----
李四 74   84   94
张三 74   83   93
-------------------

1. 建表、插入测试数据

create table tb(姓名 varchar(10) , 课程 varchar(10) , 分数 int);
insert into tb values('张三' , '语文' , 74);
insert into tb values('张三' , '数学' , 83);
insert into tb values('张三' , '物理' , 93);
insert into tb values('李四' , '语文' , 74);
insert into tb values('李四' , '数学' , 84);
insert into tb values('李四' , '物理' , 94);

2. 使用decode或者case when 

select 姓名,
max(decode(课程,'语文',分数,0)) 语文,
max(decode(课程,'数学',分数,0)) 数学,
max(decode(课程,'物理',分数,0)) 物理
from tb
group by 姓名

select 姓名,
max(case when 课程='语文' then 分数 else 0 end) 语文,
max(case when 课程='数学' then 分数 else 0 end) 数学,
max(case when 课程='物理' then 分数 else 0 end) 物理
from tb
group by 姓名

3. 使用Oracle自带转换函数

行转列 pivot

列转行 unpivot 

select * from tb pivot(max(分数) for 课程 in('语文' as 语文,'数学' as 数学,'物理' as 物理));



--具体使用方法见下,别人总结的,直接拿过来的
SELECT [星期一],[星期二],[星期三],[星期四],[星期五],[星期六],[星期日]--这里是PIVOT第三步(选择行转列后的结果集的列)这里可以用“*”表示选择所有列,也可以只选择某些列(也就是某些天)
FROM WEEK_INCOME --这里是PIVOT第二步骤(准备原始的查询结果,因为PIVOT是对一个原始的查询结果集进行转换操作,所以先查询一个结果集出来)这里可以是一个select子查询,但为子查询时候要指定别名,否则语法错误
PIVOT
(
    SUM(INCOME) for [week] in([星期一],[星期二],[星期三],[星期四],[星期五],[星期六],[星期日])--这里是PIVOT第一步骤,也是核心的地方,进行行转列操作。聚合函数SUM表示你需要怎样处理转换后的列的值,是总和(sum),还是平均(avg)还是min,max等等。例如如果week_income表中有两条数据并且其week都是“星期一”,其中一条的income是1000,另一条income是500,那么在这里使用sum,行转列后“星期一”这个列的值当然是1500了。后面的for [week] in([星期一],[星期二])中 for [week]就是说将week列的值分别转换成一个个列,也就是“以值变列”。但是需要转换成列的值有可能有很多,我们只想取其中几个值转换成列,那么怎样取呢?就是在in里面了,比如我此刻只想看工作日的收入,在in里面就只写“星期一”至“星期五”(注意,in里面是原来week列的值,"以值变列")。总的来说,SUM(INCOME) for [week] in([星期一],[星期二],[星期三],[星期四],[星期五],[星期六],[星期日])这句的意思如果直译出来,就是说:将列[week]值为"星期一","星期二","星期三","星期四","星期五","星期六","星期日"分别转换成列,这些列的值取income的总和。
)TBL--别名一定要写

oracle行转列、列转行总结 UNPIVOT(t_qtyFORt_monthIN(one_mAS‘1月’,two_mAS‘2月’,tree_mAS‘3月’,four_mAS‘4月’))PIVOT(SUM(t_value)FORt_monthIN(‘1月’AS一月,‘2月’AS二月,‘3月’AS三月,‘4月’AS四月));DECODE(lvl,1,‘1月’,2,‘2月’,3,‘3月’,4,‘4月’)ASt_month,CASElvlWHEN1THEN‘1月’... 阅读详情

相关推荐

【Oracle】Oracle行转列、列转行的几种方法

【代码】Oracle行转列、列转行的几种方法。

tttzzzqqq2018的博客 1万+

oracle学生成绩行转列

Oracle学生成绩行转列

qq_40062060的博客 391

OpenVPN 新增 windows 客户端

虚拟私人网络(Virtual Private Network,简称VPN)是一种网络技术,它允许用户通过公共网络(如互联网)建立一个安全的连接通道。本文介绍如何添加 windows 客户端。

利昂的技术存档 3765

Oracle数据库中行列转换

Oracle数据库中行列转换包括CASE语句和PIVOT及UNPIVOT

zxrhhm的博客 2万+

字节跳动已上岸测试工程师的面试经验

这个时候发面经已经有点晚了,所以现在打算让这篇面经主要面向即将秋招的童鞋,当然现在还在春招的童鞋也可以看哈,我和大家一起聊聊关于测试的二三事。   一、测试工程师的工作是什么?   测试工程师简单点说就是找bug,然后反馈给开发人员,不要小看这个工作。   首先很明显的bug开发人员有时候自己就能找到,测试人员要有比开发人员更加全面的想法才能找到深层次的问题点,   其次,要端正一个态度就是测试人员不是一个电脑小白,相反国外顶级的测试开发工程师同时也是顶级的开发工程师甚至更厉害,所以作为一个测试工程师一定要

m0_60745607的博客 2933

保姆级教程:在RK3588平台上为IMX415 Sensor配置HDR2曝光(附完整代码与避坑点)

本文提供RK3588平台上为IMX415 Sensor配置HDR2曝光的详细教程,涵盖基础概念、限制条件、实战配置步骤及常见问题解决方案。通过完整代码示例和关键参数解析,帮助开发者高效实现HDR2曝光模式,提升图像质量并避开常见陷阱。

weixin_28685287的博客 283

oracle 行转列和列转行的几种方式

使用 case when then方式、使用decode函数:DECODE(条件, 值1, 返回值1, 值2,返回值2, 值3,返回值3, . . . else 缺省值) 含义:if 条件 = 值1 then 返回值1 elsif 条件 = 值2 then 返回值2 else (缺省值) endif

SUMMERENT的博客 1万+

Oasys安装教程

在基环境下执行然后去 C:\Users.condarc打开 .condarc这个文件 删除干净里面的东西。

weixin_44254178的博客 1295

Oracle中行列转换两种实现方法

列转行的列的新列名:指的是要列转行的列名的集合新名字,既创建一个新的列来存储要列转行的列,如这里的name,他的列中值在列传行之前为原视图的多个列;被聚合的列的新列名:指的是目标结果集的列名,按照目标结果集来填写,即原来聚合的数据如这里的nums,列转行之前的列中值放在取了新名字的这个列中;:指的是要列转行的列名,既为要放到列转行的列的新列名里的列中值,就是列转行之前视图的多个列。其中,PIVOT中的column1是要转换为列的列,column2是要汇总的列,alias是列的别名。列中值1,列中值2…

Ruishine的博客 1万+

哈工大集合论与图论(下)慕课MOOC答案

答案选自2023哈工大集合论与图论慕课,慕课的题重复率很高并且具有极高的相似性,选答案时要格外注意对比选项,能力有限答案不一定面面俱到,整理不易读者且用且珍惜。

qq_34168477的博客 2902

多物理场光学仿真软件:Ansys Lumerical_(8).CHARGE解决方案详解

CHARGE 模块主要用于求解 Poisson 方程和连续性方程,以模拟半导体器件中的电荷分布和载流子输运。通过 CHARGE 模块,可以分析器件的能带结构、载流子浓度、电流密度等关键参数。这些参数对于理解器件的工作原理和优化设计至关重要。

kkchenjj的博客 1386

oracle将行变为列,oracle行转为列的方法:

今天遇到了行转为列的问题,在网上搜到一个经典的例子又一个示例:create table dd_app.bb AS(select '01' no,'ss' name, 10 jiner,'麦子' you from dual union allselect '02' no,'dd' name, 11 jiner,'萝卜' you from dual union allselect '03' no,'c...

weixin_35259908的博客 1478

Claude Code 里的 MCP 连接失败到底在报什么

文档还说明,HTTP 类型、stdio 类型等 MCP server 的接入方式不同,stdio server 会被 Claude Code 当作本地进程拉起,而 HTTP server 则需要 Claude Code 去访问一个已经存在的 HTTP endpoint。把这段输出翻成更接地气的运维语言,就是 Claude Code 已经知道我们想接两个外部能力,一个是 SAP ADT 官方 MCP,一个是 Chrome DevTools MCP,但当前没有一个完成握手。,因为它的信号更明确。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 146

Oracle行转列、列转行的几种方法

一、行转列 我们的表结构和数据如下: 1、使用PIVOT函数 Oracle 11g之后,支持使用PIVOT实现行转列 函数说明: PIVOT(任意聚合函数 FOR 列名 IN(类型)) 其中,【聚合函数】聚合的字段,是需要转化为列值的字段;【列名】是需要转化为列标识的字段,【类型】即是需要的结果展示,【类型】中可以指定别名;...

qq_32103873的博客 4万+

基于simulink的软开关技术的三相逆变器仿真

三相逆变器中的软开关技术(Soft Switching Techniques)旨在减少开关损耗,提高效率,并降低电磁干扰(EMI)。实现软开关通常涉及使用谐振电路或准谐振电路来确保开关器件在零电压(Zero Voltage Switching, ZVS)或零电流(Zero Current Switching, ZCS)条件下进行切换。下面将详细介绍如何在Simulink中进行基于软开关技术的三相逆变器仿真设计。

xiaoheshang_123的博客 162

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

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

在Oracle中,可以使用多种方法来实现行转列和列转行。以下是一些常用的方法: PIVOT函数:Oracle 11g之后,支持使用PIVOT实现行转列。 MAX和DECODE函数:可以使用MAX函数结合DECODE函数来实现行转列。 CASE WHEN和GROUP BY:这种方式是最常用的,比较容易理解。 UNPIVOT函数:可以利用UNPIVOT()函数实现列转行。 UNION ALL方法:也可以使用UNION ALL方法来实现列转行。

qq_43605229的博客 1万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【Oracle】Oracle中的行转列、列转行(unpivot、pivot函数)

Oracle中的行转列和列转行

低调做人,低调编码,神码都是浮云 2万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Oracle中的[行转列]与[列转行]

Oracle行转列与列转行学习

雷神乐乐的博客 1046

oracle 行转列,列转行

一、行转列 主要原理是利用decode函数、聚集函数(sum),结合group by分组实现的 例: --查看表是否存在 select * from T_TEST_GRADE T; --新建测试表 create table T_TEST_GRADE ( GRADE_ID VARCHAR2(10) not null, USER_NAME VARCHAR2(20), COURSE

一切都是浮云 1689

Oracle行转列和列转行的方法汇总

行转列 方法一:Oracle中的Pivot函数 说明:pivot(聚合函数 for 列名 in(类型)),其中 in(‘’) 中可以指定别名,in中还可以指定子查询,比如 select distinct ranking from temp SELECT * FROM [StudentScores] /*数据源*/ AS P PIVOT ( SUM(Score/*行转列后 列的值*/) F...

qichangjian的博客 1万+

oracle列转行和行转列

行转列 原始数据显示样式 表中显示的是公司各环节责任承担比例预算,每个公司都有5个环节(link的值表示不同的环节) 想要的样式 现在想行转列,显示成 具体操作 使用decode或者case... when实现 SELECT p.COMPANY_ID as companyId, b.OWNER_NAME as companyName, s...

beidaol的专栏 542

2.Oracle、pgsql列转行、行转列

oracle/pgsql行转列、列转行总结

Lelouch_Vi的博客 7973

oracle列转行 多个字段_oracle 多列转成一列(列转行)、 行转列

1. 多列转成一列(列转行) -- 6列转成两列(列转行) 这就是最常见的列转行,主要原理是利用SQL里面的union with temp as (select a.iid_sn, a.product_name, a.sales_figures, a.selling_cost, a.pretax_profit, a.closing_inventory from is_import_detail a...

weixin_39626409的博客 2676

Oracle——行转列与列转行

把某一个字段的值作为唯一值,然后另外一个字段的`行值转换成它的列值`,就是行转列。 把一行当中的列的字段按照行的唯一值转换成多行数据,就是列转行。

专注写bug 6658

Oracle 行转列——列转行

工作中,我们经常会碰到行转列的情况 这里我介绍几种简单的方法--行转列 1.oracle的pivot函数 原表 使用pivot函数: with temp as( select '四川省' nation ,'成都市' city,'第一' ranking from dual union all select '四川省' nation ,'绵阳市' city,'第二' ranking from dual union all select '四川省' nation ,'德阳市' city,'第三' r

菜鸟逆袭之路 516
上一篇: try-catch和throw,throws的区别
下一篇: 润乾报表集成本地环境tomcat中
coderLee0607
博客等级 码龄14年 88粉丝 75原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值