行转列小结

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

相关文章

Spring Cloud Hystrix原理与注意事项小结

《SpringCloudHystrix原理与注意事项小结》本文介绍了Hystrix的基本概念、工作原理以及其在实际开发中的应用方式,通过对Hystrix的深入学习,开发者可以在分布式系统中实现精细... 目录一、Spring Cloud Hystrix概述和设计目标(一)Spring Cloud Hystr

Keepalived+Nginx双机配置小结

《Keepalived+Nginx双机配置小结》本文主要介绍了Keepalived+Nginx双机配置小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1.1 软硬件要求1.2 部署前服务器配置调优1.3 Nginx+Keepalived部署1.3

nginx upstream六种方式分配小结

《nginxupstream六种方式分配小结》本文主要介绍了nginxupstream六种方式分配小结,包括轮询、加权轮询、IP哈希、公平轮询、URL哈希和备份服务器,具有一定的参考价格,感兴趣的可... 目录1 轮询(默认)2 weight3 ip_hash4 fair(第三方)5 url_hash(第三

Python中conda虚拟环境创建及使用小结

《Python中conda虚拟环境创建及使用小结》本文主要介绍了Python中conda虚拟环境创建及使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录0.前言1.Miniconda安装2.conda本地基本操作3.创建conda虚拟环境4.激活c

MobaXterm远程登录工具功能与应用小结

《MobaXterm远程登录工具功能与应用小结》MobaXterm是一款功能强大的远程终端软件,主要支持SSH登录,拥有多种远程协议,实现跨平台访问,它包括多会话管理、本地命令行执行、图形化界面集成和... 目录1. 远程终端软件概述1.1 远程终端软件的定义与用途1.2 远程终端软件的关键特性2. 支持的

Java判断多个时间段是否重合的方法小结

《Java判断多个时间段是否重合的方法小结》这篇文章主要为大家详细介绍了Java中判断多个时间段是否重合的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录判断多个时间段是否有间隔判断时间段集合是否与某时间段重合判断多个时间段是否有间隔实体类内容public class D

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

JS 实现复制到剪贴板的几种方式小结

《JS实现复制到剪贴板的几种方式小结》本文主要介绍了JS实现复制到剪贴板的几种方式小结,包括ClipboardAPI和document.execCommand这两种方法,具有一定的参考价值,感兴趣的... 目录一、Clipboard API相关属性方法二、document.execCommand优点:缺点:

Python创建Excel的4种方式小结

《Python创建Excel的4种方式小结》这篇文章主要为大家详细介绍了Python中创建Excel的4种常见方式,文中的示例代码简洁易懂,具有一定的参考价值,感兴趣的小伙伴可以学习一下... 目录库的安装代码1——pandas代码2——openpyxl代码3——xlsxwriterwww.cppcns.c