行转列小结

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配置扩展之JavaConfig的使用小结

《Spring配置扩展之JavaConfig的使用小结》JavaConfig是Spring框架中基于纯Java代码的配置方式,用于替代传统的XML配置,通过注解(如@Bean)定义Spring容器的组... 目录JavaConfig 的概念什么是JavaConfig?为什么使用 JavaConfig?Jav

SQL Server中行转列方法详细讲解

《SQLServer中行转列方法详细讲解》SQL行转列、列转行可以帮助我们更方便地处理数据,生成需要的报表和结果集,:本文主要介绍SQLServer中行转列方法的相关资料,需要的朋友可以参考下... 目录前言一、为什么需要行转列二、行转列的基本概念三、使用PIVOT运算符进行行转列1.创建示例数据表并插入数

C# Semaphore与SemaphoreSlim区别小结

《C#Semaphore与SemaphoreSlim区别小结》本文主要介绍了C#Semaphore与SemaphoreSlim区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录一、核心区别概览二、详细对比说明1.跨进程支持2.异步支持(关键区别!)3.性能差异4.API 差

C#中Trace.Assert的使用小结

《C#中Trace.Assert的使用小结》Trace.Assert是.NET中的运行时断言检查工具,用于验证代码中的关键条件,下面就来详细的介绍一下Trace.Assert的使用,具有一定的参考价值... 目录1、 什么是 Trace.Assert?1.1 最简单的比喻1.2 基本语法2、⚡ 工作原理3

C# IPAddress 和 IPEndPoint 类的使用小结

《C#IPAddress和IPEndPoint类的使用小结》本文主要介绍了C#IPAddress和IPEndPoint类的使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定... 目录一、核心作用网络编程基础类二、IPAddress 类详解三种初始化方式1. byte 数组初始化2. l

C++打印 vector的几种方法小结

《C++打印vector的几种方法小结》本文介绍了C++中遍历vector的几种方法,包括使用迭代器、auto关键字、typedef、计数器以及C++11引入的范围基础循环,具有一定的参考价值,感兴... 目录1. 使用迭代器2. 使用 auto (C++11) / typedef / type alias

C语言逗号运算符和逗号表达式的使用小结

《C语言逗号运算符和逗号表达式的使用小结》本文详细介绍了C语言中的逗号运算符和逗号表达式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习... 在C语言中逗号“,”也是一种运算符,称为逗号运算符。 其功能是把两个表达式连接其一般形式为:表达

Go 使用环境变量的实现小结

《Go使用环境变量的实现小结》作为软件开发人员,在项目中管理配置变量的重要性,本文主要介绍在Golang中处理环境变量的强大工具github.com/joho/godotenv包,利用这个包,你可以... 目录步js骤 1:安装步骤 2:制作 .env 文件步骤android 3:加载环境变量步骤 4:利用

Spring StateMachine 使用小结

《SpringStateMachine使用小结》SpringStateMachine是一个用于管理复杂状态流转的框架,本文就来介绍一下SpringStateMachine使用,具有一定的参考价值,... 目录一、基本概念二、核心组件三、引入依赖四、定义状态和事件五、配置状态机六、使用状态机七、添加动作和条件

Mysql 驱动程序的程序小结

《Mysql驱动程序的程序小结》MySQL驱动程序是连接应用程序与MySQL数据库的重要组件,根据不同的编程语言和应用场景,MySQL提供了多种驱动程序,下面就来详细的了解一下驱动程序,感兴趣的可以... 目录一、mysql 驱动程序的概念二、常见的 MySQL 驱动程序1. MySQL Connector