1) 列转行
WITH TB AS ( SELECT '1' AS SID, '英语' AS E, '70' AS E_SCORE, '数学' S, '89' AS S_SCORE, '语文' AS T, '69' AS T_SCORE FROM DUAL ) SELECT SID,E AS 科目,E_SCORE AS 分数 FROM ( SELECT SID,E,E_SCORE FROM TB UNION ALL SELECT SID,S,S_SCORE FROM TB UNION ALL SELECT SID,T,T_SCORE FROM TB );
2) 行转列 (数值类型)
WITH TB AS ( SELECT '1' AS SID, '英语' AS E,'70' AS E_SCORE FROM DUAL UNION ALL SELECT '1' AS SID, '数学' S,'89' AS S_SCORE FROM DUAL UNION ALL SELECT '1' AS SID, '语文' AS T,'69' AS T_SCORE FROM DUAL UNION ALL SELECT '2' AS SID, '英语' AS E,'72' AS E_SCORE FROM DUAL UNION ALL SELECT '2' AS SID, '数学' S,'58' AS S_SCORE FROM DUAL UNION ALL SELECT '2' AS SID, '语文' AS T,'60' AS T_SCORE FROM DUAL UNION ALL SELECT '3' AS SID, '英语' AS E,'85' AS E_SCORE FROM DUAL UNION ALL SELECT '3' AS SID, '数学' S,'90' AS S_SCORE FROM DUAL ) SELECT SID, SUM(DECODE(E,'英语',E_SCORE)) AS 英语, SUM(DECODE(E,'语文',E_SCORE)) AS 语文, SUM(DECODE(E,'数学',E_SCORE)) AS 数学 FROM TB GROUP BY SID;
3) 方法一:行转列 (字符串类型,适用于数值类型)
WITH TB AS ( SELECT 1 AS ID,'你' AS NAME FROM DUAL UNION ALL SELECT 1 ,'好' FROM DUAL UNION ALL SELECT 1 ,'吗' FROM DUAL UNION ALL SELECT 2 ,'我' FROM DUAL UNION ALL SELECT 2 ,'不' FROM DUAL UNION ALL SELECT 2 ,'好' FROM DUAL ), TB2 AS ( SELECT ID, NAME, ROW_NUMBER() OVER(PARTITION BY ID ORDER BY ID) AS RN FROM TB ), TB3 AS ( SELECT ID, MAX(SYS_CONNECT_BY_PATH(NAME,' ')) AS NAME FROM TB2 START WITH RN = 1 CONNECT BY PRIOR RN = RN - 1 AND PRIOR ID = ID GROUP BY ID ) SELECT ID,REPLACE(NAME,' ','') AS NAME FROM TB3;
4) 方法二:行转列 (字符串类型,适用于数值类型)
WITH TB AS ( SELECT 1 AS ID,'你' AS NAME FROM DUAL UNION ALL SELECT 1 ,'好' FROM DUAL UNION ALL SELECT 1 ,'吗' FROM DUAL UNION ALL SELECT 2 ,'我' FROM DUAL UNION ALL SELECT 2 ,'不' FROM DUAL UNION ALL SELECT 2 ,'好' FROM DUAL ), TB2 AS ( SELECT ID, NAME, RN, LAG(RN) OVER(PARTITION BY ID ORDER BY RN) AS LG FROM ( SELECT ID,NAME,ROW_NUMBER() OVER(PARTITION BY ID ORDER BY ID) AS RN FROM TB ) ), TB3 AS ( SELECT ID, MAX(SYS_CONNECT_BY_PATH(NAME,' ')) AS NAME FROM TB2 START WITH RN = 1 CONNECT BY PRIOR RN = RN - 1 AND PRIOR ID = ID GROUP BY ID ) SELECT ID,REPLACE(NAME,' ','') AS NAME FROM TB3;
相关推荐
本文将深入解析一个Oracle行列转换的例子,通过详细解释SQL语句的构成及其背后的逻辑,帮助读者理解如何在Oracle中实现行列转换。 ### Oracle行列转换例子解析 #### SQL语句结构分析 给定的SQL语句主要分为几个...
通过下载提供的`Oracle补充内容_行列转换.sql`文件,你可以看到具体的SQL示例和实际操作,这将帮助你更好地理解和掌握Oracle的行列转换技巧。在实践中,理解并熟练运用这些技术,将有助于你更有效地处理和展示数据,...
在Oracle数据库中,行列转换是一项常用且强大的功能,它允许数据在不同的维度上进行转换,以便于数据分析和报告。本文将深入探讨Oracle中实现行列转换的几种方法,包括使用`UNION ALL`、`MODEL`子句以及集合类型(`...
【Oracle 行列转换实例】 在数据库管理中,有时我们需要将数据表的行与列进行转换,以便于数据分析和报表展示。Oracle 提供了一种高效的方法,即使用分析函数来实现这种行列转换。分析函数主要设计用于处理累计计算...
Oracle 行列转换总结 Oracle 行列转换是指在 Oracle 数据库中将行与列之间进行转换的操作。这种转换有六种情况:列转行、行转列、多列转换成字符串、多行转换成字符串、字符串转换成多列、字符串转换成多行。 1. ...
### Oracle 行列转换知识点详解 #### 一、概述 在数据库操作中,行列转换是一项非常实用的功能,尤其是在处理报表数据或需要特定格式输出时。本文档将详细讲解Oracle数据库中的行列转换方法,并通过具体实例来说明...
oracle行列转换示例,查询转换,有创表过程,数据,清晰明了
### Oracle 行列转换知识点详解 #### 一、概述 在数据库操作中,有时需要将数据从行格式转换为列格式或反之亦然,这种需求通常被称为“行列转换”。Oracle 提供了多种方法来实现这样的转换,适用于不同的场景。本文...
在Oracle数据库中,行列转换是一种常见的数据操作需求,主要用于改变数据的展示格式,使得数据能够更好地适应特定的分析或报告需求。本文将详细介绍如何在Oracle中实现行转列(即行列转换的一种)以及列转行的操作,...
常见的数据库面试关于行转列列转行的操作,方便你的面试,经常考到的
### Oracle 数据库中的行列转换详解 #### 一、引言 在处理复杂的数据查询与展示时,经常会遇到需要将数据库中的行数据转换成列数据的需求,这种操作通常被称为“行列转换”。例如,当我们想要汇总不同部门对各种...
行列转换,sys_connect_by_path,row_number等函数的用法
Oracle数据库中的行列转换是数据分析和报表制作中常见的需求,它涉及到将数据表中的一行数据转化为多列,或者相反,将多列数据转化成一行。在Oracle中,我们可以使用多种方法来实现这种转换,比如使用Pivot、Unpivot...
在Oracle数据库中,有时我们需要将表格中的行转换为列或将列转换为行,这种操作被称为行列转换。这种转换对于数据分析、报表制作等场景非常有用。本文将详细介绍Oracle中如何进行行列转换,并提供实际的例子。 ####...
### Oracle SQLServer 行列转换知识点详解 #### 一、SQLServer 行转列方法 在SQLServer中,实现行转列的操作有两种主要方法:一种是利用`CASE...WHEN`语句配合`GROUP BY`聚合函数的方式;另一种是通过`PIVOT`操作...
在Oracle数据库中,数据的行列转换是数据处理过程中的常见操作,尤其在数据分析、报表制作以及数据展示时显得尤为重要。本篇文章将详细讲解Oracle 10g中的行列转换技术,包括如何实现行转列和列转行。 首先,我们要...