行转列小结

2024-03-02 19:58
文章标签 小结 转列

本文主要是介绍行转列小结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、创建测试环境

1.创建测试数据​​​​​​

create table cc (student   nvarchar2(2),course    nvarchar2(2),score     int
);

2.插入测试数据

Insert into CC (STUDENT,COURSE,SCORE) values ('张三','语文',78);
Insert into CC (STUDENT,COURSE,SCORE) values ('张三','数学',87);
Insert into CC (STUDENT,COURSE,SCORE) values ('张三','英语',82);
Insert into CC (STUDENT,COURSE,SCORE) values ('张三','物理',90);
Insert into CC (STUDENT,COURSE,SCORE) values ('李四','语文',65);
Insert into CC (STUDENT,COURSE,SCORE) values ('李四','数学',77);
Insert into CC (STUDENT,COURSE,SCORE) values ('李四','英语',65);
Insert into CC (STUDENT,COURSE,SCORE) values ('李四','物理',85);
Insert into CC (STUDENT,COURSE,SCORE) values ('王五','语文',80);
Insert into CC (STUDENT,COURSE,SCORE) values ('王五','数学',90);
Insert into CC (STUDENT,COURSE,SCORE) values ('王五','英语',75);
Insert into CC (STUDENT,COURSE,SCORE) values ('王五','物理',91);
Insert into CC (STUDENT,COURSE,SCORE) values ('赵六','语文',93);
Insert into CC (STUDENT,COURSE,SCORE) values ('赵六','数学',76);
Insert into CC (STUDENT,COURSE,SCORE) values ('赵六','英语',86);
Insert into CC (STUDENT,COURSE,SCORE) values ('赵六','物理',77);

3.显示结果

                         

二、行转列实现方法

1.使用vm_concat、pivot、decode函数实现

      1)listagg:将满足条件的列值显示成一行,可以指定分割符,可以排序。   

      举       例:

select STUDENT,listagg(SCORE,'|') within group (order by SCORE,STUDENT) B
from cc
group by STUDENT;

      显示结果:

                          

      2) vm_concat:将满足条件的列值显示成一行。

                 缺      点:显示结果顺序错乱。

                                  之前采用这个方法进行合并,但是这是个非公开函数,而且12c后这个功能就被取消了,所以请用第一个方

                                  法代这个方法 。

                信息来源:http://blog.itpub.net/29867/viewspace-2123105/

                 替代方法: Tom 写过的 stragg
                                    11g 可以用 listagg
                                    9i/10g 可以用 sys_connect_by_path 来实现 

      举       例:

               

SELECT STUDENT,WM_CONCAT(SCORE)FROM CC GROUP BY STUDENT;

      显示结果:

                          

      改       进:

             

select student,max(score)
from  (select student,wm_concat(score) over(partition by student order by score) as score from cc)
group by student;

      显示结果:

                       

       

       3)pivot:对满足条件的A、B两列进行如下操作,将A列中指定的值生成为列名,将与之对应的B值生成为(新)列值。

            缺点:只支持11g及以上版本。

            举例:

select * from cc
PIVOT(max(score) FOR COURSE IN ('语文' AS 语文, '数学' AS 数学,'英语' as 英语 ,'物理' as 物理 ));

            结果:

                        

       4)decode:判断字符串是否一样;

                 格式:DECODE(value,if1,then1,if2,then2,if3,then3,...,else)

                 举例:

                           

 SELECT  student,MAX(DECODE(COURSE, '语文', SCORE)) as 语文,MAX(DECODE(COURSE, '数学', SCORE)) as 数学,MAX(DECODE(COURSE, '英语', SCORE)) as 英语,MAX(DECODE(COURSE, '物理', SCORE)) as 物理
FROM CC
GROUP BY student;

       结果:

                     

2.用case when实现

      举例:

select STUDENT max(case when course='语文' then score  end) as 语文,max(case when course='数学' then score  end) as 数学,max(case when course='英语' then score  end) as 英语,max(case when course='物理' then score  end) as 物理
from cc 
group by STUDENT;

      结果:

                  

 

 

这篇关于行转列小结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/767264

相关文章

分布式系统的个人理解小结

分布式系统:分的微小服务,以小而独立的业务为单位,形成子系统。 然后分布式系统中需要有统一的调用,形成大的聚合服务。 同时,微服务群,需要有交流(通讯,注册中心,同步,异步),有管理(监控,调度)。 对外服务,需要有控制的对外开发,安全网关。

Linux环境配置中问题小结

在Linux环境配置中,遇到问题首先猜测: 1、是否是权限问题; 2、软连接是否配置;

long long,_int64使用小结

前言:   在16位环境下,int/unsigned int 占16位,long/unsigned long占32位   在32位环境下,int占32位,unsigned int占16位,long/unsigned long占32位 何时需要使用:   long 和 int 范围是[-2^31,2^31),即-2147483648~2147483647,而unsigned范围是[0,2^32),

密码学读书笔记小结

密码学是保证消息的私密性和完整性以及消息认证的基础。加密算法的选择和密钥的管理是安全机制的效率、性能和可用性的关键。 公钥加密算法: 分发密钥比较容易,但是对大数据量的加密性能较差密钥加密算法: 更适合大批的加密任务混合型加密协议: 例如TLS,先用公钥加密建立一个安全通道,然后使用通道交换密钥,并将此密钥用于后续数据交换。 对分布式系统攻击的分类: 窃听: 未经授权获得消息副本伪装: 在未

Android 源码中jni项目 加载so目录小结

Android 源码中jni项目 加载so目录小结 文章目录 Android 源码中jni项目 加载so目录小结一、前言二、so目录验证测试1、jni so文件错误报错(1)报错1 - 未找到so文件:(2)报错2 - so文件中未找到native方法: 2、验证的几种情况(1)apk下面的 lib/arm64/ 放置正确的so文件(2)apk下面的 lib/arm64/ 放置错误的so文

maven打包成可执行的jar,以及读取配置文件问题小结

文章来源 https://blog.csdn.net/chasonsp/article/details/88852353 折腾的几天,使用maven打包后发现了问题,首先是打包的配置文件读取问题,使用getResource().getPah()会发现在访问jar包的文件时,路径里会有感叹号(杠杠滴~~)是这样的 …jar!.. 经过不断的查找资料及反复验证后,终于找到了可行的方法:

一个小知识点-Hive行转列实现Pivot

前言 传统关系型数据库中,无论是Oracle(11g之后)还是SQLserver(2005之后),都自带了Pivot函数实现行转列功能,本文主要讲述在Hive中实现行转列的两种方式。 传统数据库方式 这种方式是借鉴在Oracle或者SQLserver在支持Pivot函数之前实现行转列的方式,实际上语法没有什么变化,只是换成了Hive。 with testtable(select 1 id

【硬刚大数据】Flink在实时在实时计算平台和实时数仓中的企业级应用小结

欢迎关注博客主页:https://blog.csdn.net/u013411339 欢迎点赞、收藏、留言 ,欢迎留言交流!本文由【王知无】原创,首发于 CSDN博客!本文首发CSDN论坛,未经过官方和本人允许,严禁转载! 本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的面试部分补充。 大数据领域自 2010 年开始,以 Hadoop、Hive 为代

Kafka常见问题学习路径源码阅读小结 | 写在Kafka3.0发布之际

严格来说,这篇文章也不是今天写的。是之前断断续续写在了几篇文章中。 2021年9月21日,随着Kafka3.0的发布,Kafka在「分布式流处理平台」这个目标上的努力进一步得到加强!Kafka不满足于「消息引擎」的定位,正式基于这样的定位,Kafka 社区于 0.10.0.0 版本正式推出了流处理组件 Kafka Streams,也正是从这个版本开始,Kafka 正式"变身"为分布式的流处理平台

C++中继承及virtual小结

一、继承基础知识 C++中的继承 1.1继承的基本概念 类与类之间的关系 has-A,包含关系,用以描述一个类由多个“部件类”构成,实现has-A关系用类的成员属性表示,即一个类的成员属性是另一个已经定义好的类。 use-A,一个类使用另一个类,通过类之间的成员函数相互联系,定义友元或者通过传递参数的方式来实现。(和组合不同) is-A,即继承关系,关系具有传递性。 继承的特点 子类拥有