行转列小结

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

相关文章

Kotlin Map映射转换问题小结

《KotlinMap映射转换问题小结》文章介绍了Kotlin集合转换的多种方法,包括map(一对一转换)、mapIndexed(带索引)、mapNotNull(过滤null)、mapKeys/map... 目录Kotlin 集合转换:map、mapIndexed、mapNotNull、mapKeys、map

Redis中Stream详解及应用小结

《Redis中Stream详解及应用小结》RedisStreams是Redis5.0引入的新功能,提供了一种类似于传统消息队列的机制,但具有更高的灵活性和可扩展性,本文给大家介绍Redis中Strea... 目录1. Redis Stream 概述2. Redis Stream 的基本操作2.1. XADD

SpringSecurity整合redission序列化问题小结(最新整理)

《SpringSecurity整合redission序列化问题小结(最新整理)》文章详解SpringSecurity整合Redisson时的序列化问题,指出需排除官方Jackson依赖,通过自定义反序... 目录1. 前言2. Redission配置2.1 RedissonProperties2.2 Red

C++中NULL与nullptr的区别小结

《C++中NULL与nullptr的区别小结》本文介绍了C++编程中NULL与nullptr的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编... 目录C++98空值——NULLC++11空值——nullptr区别对比示例 C++98空值——NUL

C++ Log4cpp跨平台日志库的使用小结

《C++Log4cpp跨平台日志库的使用小结》Log4cpp是c++类库,本文详细介绍了C++日志库log4cpp的使用方法,及设置日志输出格式和优先级,具有一定的参考价值,感兴趣的可以了解一下... 目录一、介绍1. log4cpp的日志方式2.设置日志输出的格式3. 设置日志的输出优先级二、Window

Python中反转字符串的常见方法小结

《Python中反转字符串的常见方法小结》在Python中,字符串对象没有内置的反转方法,然而,在实际开发中,我们经常会遇到需要反转字符串的场景,比如处理回文字符串、文本加密等,因此,掌握如何在Pyt... 目录python中反转字符串的方法技术背景实现步骤1. 使用切片2. 使用 reversed() 函

C#中Guid类使用小结

《C#中Guid类使用小结》本文主要介绍了C#中Guid类用于生成和操作128位的唯一标识符,用于数据库主键及分布式系统,支持通过NewGuid、Parse等方法生成,感兴趣的可以了解一下... 目录前言一、什么是 Guid二、生成 Guid1. 使用 Guid.NewGuid() 方法2. 从字符串创建

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

SpringBoot中使用Flux实现流式返回的方法小结

《SpringBoot中使用Flux实现流式返回的方法小结》文章介绍流式返回(StreamingResponse)在SpringBoot中通过Flux实现,优势包括提升用户体验、降低内存消耗、支持长连... 目录背景流式返回的核心概念与优势1. 提升用户体验2. 降低内存消耗3. 支持长连接与实时通信在Sp

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使