`
夜尽O天明
  • 浏览: 12259 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

oracle合并字段、列转行、行转列操作

阅读更多

一、合并字段

原理:利用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行转列,列转行的例子

    Oracle行转列(不定列)

    本篇文章将详细探讨Oracle如何实现行转列为列的过程,以及在面对不确定列数时的解决方案。 在传统的SQL查询中,数据通常是以行的形式存储和展示。然而,在某些场景下,我们可能需要将同一类别的数据从多行转换为一...

    oracle动态行转列

    本文将深入探讨如何通过Oracle中的存储过程实现动态“行转列”,并结合给定文件的信息,详细解析其工作原理、优点及应用场景。 ### 核心知识点:Oracle动态行转列 #### 1. 存储过程与动态SQL 存储过程是预编译的...

    Oracle行转列之pivot

    在Oracle数据库中,行转列(也称为数据透视)和列转行(unpivot)是SQL查询中用于数据转换的高级功能。从Oracle 11g版本开始,引入了PIVOT和UNPIVOT关键字,以支持显式的查询转换,即从行数据转换为列数据,或从列...

    oracle行转列

    - T-SQL_经典行专列、列转行,分页及存储过程.doc:T-SQL是SQL Server的扩展,但其中的行转列和分页概念与Oracle相似。在Oracle中,可以使用ROW_NUMBER()函数配合PARTITION BY和ORDER BY来实现分页查询。 - oracle_...

    Oracle的列转行问题

    列转行(Pivot)和行转列(Unpivot)是两种基本操作,可以将数据按照不同的维度进行组织。传统的列转行方法通常涉及`DECODE`或`CASE`函数与聚合函数如`MAX`或`MIN`的结合,但这些方法可能在处理大量数据时对性能造成...

    oracle某个字段多行记录转化为一行

    此标题明确指出了解决的问题:在Oracle数据库中,如何将特定字段的多行记录合并成一行记录。这种需求通常出现在报告或数据分析的过程中,当需要将多个相关的值组合在一起进行展示或进一步处理时。 ### 描述理解 ...

    oracle中实现列转行实例

    oracle中实现列转行实例,有表的创建,数据的插入,查询的sql

    oracle实现行转列功能,并使用逗号进行隔开拼接,成为一条数据.pdf

    Oracle 实现行转列功能并使用逗号进行隔开拼接成为一条数据 Oracle 中实现行转列功能,并使用逗号进行隔开拼接,成为一条数据是指将多行数据合并成一行数据,并用逗号分隔每个字段的值。这种功能在实际应用中非常...

    oracle行转列较精典的解决方案

    在Oracle数据库管理与开发过程中,经常会遇到需要将数据表中的行数据转换为列数据的情况,这种操作被称为“行转列”或者“行列转换”。行列转换是数据分析、报表生成等场景中非常常见的需求之一。本文将详细介绍几种...

    DB2 SQL 实现行转列,列转行

    DB2 SQL 通过函数(CONCAT/POSSTR/LOCATE)实现行转列,列转行 可以按照标点把多列转换为一行,多行转换为一列

    Oracle行转列

    Oracle行转列是指在Oracle数据库中将行数据转换为列数据或将列数据转换为行数据的操作。这种操作在实际应用中非常有用,例如,在数据报表、数据分析和数据挖掘等领域都需要使用行转列操作。 1. 列转行 列转行是指...

    oracle的列转行问题

    Oracle 列转行问题解决方案 Oracle 数据库中,列转行问题是一个非常传统的话题。在这个问题中,我们需要将行数据转换成不同的列表示,或者将不同的列数据写到同一列的不同行上。这种问题在实际应用中非常常见,如将...

    ORACLE 列转行 DECODE函数用法

    DECODE函数在处理列转行的问题时,尤其适用于将多列数据合并到一行中,使得数据展示更加简洁明了。下面我们将详细讲解DECODE函数的使用方法以及如何在列转行操作中应用它。 DECODE函数的基本语法如下: ```sql ...

    oracle 行转列

    ### Oracle 行转列知识点详解 #### 一、Oracle 行转列概念及应用场景 在数据库操作中,经常需要对数据进行格式上的调整以便更好地分析或展示数据。其中,“行转列”是一种常见的数据处理方式,它指的是将原本存储...

    oracle数据库字段值自动加1

    Oracle 数据库字段值自动加 1 Oracle 数据库中,字段值自动加 1 是一个常见的需求,特别是在数据插入时需要自动生成唯一标识符的情况下。下面将详细介绍如何实现 Oracle 数据库字段值自动加 1。 首先,需要创建一...

    oracle 多列分组和行转列 理解和实例

    理解日常工作中常用到的多列分组, 如【统计不同部门、 不同职位的平均工资】和 行转列 包含例子 和 个人理解分析

Global site tag (gtag.js) - Google Analytics