一、合并字段
原理:利用wm_concat函数、group by 分组函数完成
1、建立测试表
create table test_concat ( ID VARCHAR2(10), NAME VARCHAR2(20), TYPE VARCHAR2(10) )
2、初始化测试数据
ID NAME TYPE
1 jia 70
2 jia 75
3 jia 80
4 yi 75
5 yi 79
6 yi 88
3、执行sql
select name,wm_concat(type) type_all from test_concat group by name;
4、执行结果
NAME TYPE_ALL
jia 70,75,80
jia 70,75,80
jia 70,75,80
yi 75,79,88
yi 75,79,88
yi 75,79,88
5、这样执行完会出现重复数据,需要做去重操作。
二、行转列
原理:利用sum聚焦函数、decode判断函数、group by 分组函数来综合完成。
备注:sum函数聚焦的不仅可以是number的数值类型,还可以是非数值的varchar2类型等。
1、建立测试数据表:test
create table test ( ID VARCHAR2(10), NAME VARCHAR2(20), COURSE VARCHAR2(20), SCORE NUMBER )
2、初始化测试数据:
ID NAME COURSE SCORE
1 jia Chinese 70
2 jia Math 75
3 jia English 80
4 yi Chinese 75
5 yi Math 79
6 yi English 88
3、执行sql
select name, sum(decode(course,'Chinese',score,null)) Chinese, sum(decode(course,'Math',score,null)) Math, sum(decode(course,'English',score,null)) English from test group by name order by name;
或者将判断函数decode换成case when执行sql
select name, sum(case course when 'Chinese' then score else null end) Chinese, sum(case course when 'Math' then score else null end) Math, sum(case course when 'English' then score else null end) English from test group by name order by name;
4、执行结果:
NAME CHINESE MATH ENGLISH
jia 70 75 80
yi 75 79 88
三、行转列
原理:利用union函数
1、建立测试表
create table TEST_NEW ( ID VARCHAR2(10), NAME VARCHAR2(20), CHINESE VARCHAR2(10), ENGLISH VARCHAR2(10), MATH VARCHAR2(10) )
2、初始化测试数据
ID NAME CHINESE ENGLISH MATH
1 jia 70 75 80
2 yi 76 73 88
3、执行sql
select NAME, 'CHINESE' COURSE , CHINESE as SCORE from test_new union select NAME, 'MATH' COURSE, MATH as SCORE from test_new union select NAME, 'ENGLISH' COURSE, ENGLISH as SCORE from test_new order by NAME,COURSE
4、执行结果
NAME COURSE SCORE
jia Chinese 70
jia Math 75
jia English 80
yi Chinese 76
yi Math 73
yi English 88
相关推荐
oracle行转列,列转行的例子
本篇文章将详细探讨Oracle如何实现行转列为列的过程,以及在面对不确定列数时的解决方案。 在传统的SQL查询中,数据通常是以行的形式存储和展示。然而,在某些场景下,我们可能需要将同一类别的数据从多行转换为一...
本文将深入探讨如何通过Oracle中的存储过程实现动态“行转列”,并结合给定文件的信息,详细解析其工作原理、优点及应用场景。 ### 核心知识点:Oracle动态行转列 #### 1. 存储过程与动态SQL 存储过程是预编译的...
在Oracle数据库中,行转列(也称为数据透视)和列转行(unpivot)是SQL查询中用于数据转换的高级功能。从Oracle 11g版本开始,引入了PIVOT和UNPIVOT关键字,以支持显式的查询转换,即从行数据转换为列数据,或从列...
- T-SQL_经典行专列、列转行,分页及存储过程.doc:T-SQL是SQL Server的扩展,但其中的行转列和分页概念与Oracle相似。在Oracle中,可以使用ROW_NUMBER()函数配合PARTITION BY和ORDER BY来实现分页查询。 - oracle_...
列转行(Pivot)和行转列(Unpivot)是两种基本操作,可以将数据按照不同的维度进行组织。传统的列转行方法通常涉及`DECODE`或`CASE`函数与聚合函数如`MAX`或`MIN`的结合,但这些方法可能在处理大量数据时对性能造成...
此标题明确指出了解决的问题:在Oracle数据库中,如何将特定字段的多行记录合并成一行记录。这种需求通常出现在报告或数据分析的过程中,当需要将多个相关的值组合在一起进行展示或进一步处理时。 ### 描述理解 ...
oracle中实现列转行实例,有表的创建,数据的插入,查询的sql
Oracle 实现行转列功能并使用逗号进行隔开拼接成为一条数据 Oracle 中实现行转列功能,并使用逗号进行隔开拼接,成为一条数据是指将多行数据合并成一行数据,并用逗号分隔每个字段的值。这种功能在实际应用中非常...
在Oracle数据库管理与开发过程中,经常会遇到需要将数据表中的行数据转换为列数据的情况,这种操作被称为“行转列”或者“行列转换”。行列转换是数据分析、报表生成等场景中非常常见的需求之一。本文将详细介绍几种...
DB2 SQL 通过函数(CONCAT/POSSTR/LOCATE)实现行转列,列转行 可以按照标点把多列转换为一行,多行转换为一列
Oracle行转列是指在Oracle数据库中将行数据转换为列数据或将列数据转换为行数据的操作。这种操作在实际应用中非常有用,例如,在数据报表、数据分析和数据挖掘等领域都需要使用行转列操作。 1. 列转行 列转行是指...
Oracle 列转行问题解决方案 Oracle 数据库中,列转行问题是一个非常传统的话题。在这个问题中,我们需要将行数据转换成不同的列表示,或者将不同的列数据写到同一列的不同行上。这种问题在实际应用中非常常见,如将...
DECODE函数在处理列转行的问题时,尤其适用于将多列数据合并到一行中,使得数据展示更加简洁明了。下面我们将详细讲解DECODE函数的使用方法以及如何在列转行操作中应用它。 DECODE函数的基本语法如下: ```sql ...
### Oracle 行转列知识点详解 #### 一、Oracle 行转列概念及应用场景 在数据库操作中,经常需要对数据进行格式上的调整以便更好地分析或展示数据。其中,“行转列”是一种常见的数据处理方式,它指的是将原本存储...
Oracle 数据库字段值自动加 1 Oracle 数据库中,字段值自动加 1 是一个常见的需求,特别是在数据插入时需要自动生成唯一标识符的情况下。下面将详细介绍如何实现 Oracle 数据库字段值自动加 1。 首先,需要创建一...
理解日常工作中常用到的多列分组, 如【统计不同部门、 不同职位的平均工资】和 行转列 包含例子 和 个人理解分析