`
zhuqinglin
  • 浏览: 27585 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

Oracle 行列互转

 
阅读更多

一、行转列

1)decode方式

with courses as(

select'001' user_id ,'张三' user_name,'语文' course,67 score from dual unionall

select'001' user_id ,'张三' user_name,'数学' course,76 score from dual unionall

select'001' user_id ,'张三' user_name,'英语' course,100 score from dual unionall

select'002' user_id ,'李四' user_name,'语文' course,70 score from dual unionall

select'002' user_id ,'李四' user_name,'数学' course,90 score from dual unionall

select'002' user_id ,'李四' user_name,'英语' course,120 score from dual

)

SELECT USER_ID,USER_NAME,

SUM(DECODE(course,'语文',score,0)) 语文,--这里使用max,min都可以

SUM(DECODE(course,'数学',score,0)) 数学,

SUM(DECODE(course,'英语',score,0)) 英语

FROM courses

 

GROUPBY USER_ID ,USER_NAME

 

执行结果:

 

USER_ID USER_NAME 语文 数学 英语
001 张三 67 76 100
002 李四 70 90 120

 

 2)CASE WHEN 表达式

 

 with courses as(

select'001' user_id ,'张三' user_name,'语文' course,67 score from dual unionall

select'001' user_id ,'张三' user_name,'数学' course,76 score from dual unionall

select'001' user_id ,'张三' user_name,'英语' course,100 score from dual unionall

select'002' user_id ,'李四' user_name,'语文' course,70 score from dual unionall

select'002' user_id ,'李四' user_name,'数学' course,90 score from dual unionall

select'002' user_id ,'李四' user_name,'英语' course,120 score from dual

)

SELECT USER_ID,USER_NAME,

sum(casewhen course='语文'then score end) "语文",

sum(casewhen course='数学'then score end) "数学",

sum(casewhen course='英语'then score end) "英语"

from courses

groupby USER_ID ,USER_NAME

 

二、列转行

 1)UNION ALL

with courses as(

select'001' user_id ,'张三' user_name,67 ch_score,76 math_score,100 eng_score  from dual

union

select'002' user_id ,'李四' user_name,70 ch_score,90 math_score,120 eng_score from dual

)

 

select user_id,user_name,'语文' course,ch_score score from courses

union

select user_id,user_name,'数学' course,math_score score from courses

union

 

select user_id,user_name,'英语' course,eng_score score from courses

查询结果:

 

USER_ID USER_NAME COURSE SCORE
002 李四 数学 90
001 张三 数学 76
002 李四 英语 120
001 张三 英语 100
002 李四 语文 70
001 张三 语文 67

 

2)INSERT ALL

语句如下:

createtable lie2hang_result(

idnumber,

namevarchar2(20),

course varchar2(20),

score number

);

insertall

into lie2hang_result(id,name,course,score) values(id,name,'语文',chinese)

into lie2hang_result(id,name,course,score) values(id,name,'数学',math)

into lie2hang_result(id,name,course,score) values(id,name,'英语',english)

into lie2hang_result(id,name,course,score) values(id,name,'历史',history)

into lie2hang_result(id,name,course,score) values(id,name,'化学',chemistry)

 

selectid,name,chinese,math,english,history,chemistry from lie2hang;

分享到:
评论

相关推荐

    Oracle行列转换

    通过下载提供的`Oracle补充内容_行列转换.sql`文件,你可以看到具体的SQL示例和实际操作,这将帮助你更好地理解和掌握Oracle的行列转换技巧。在实践中,理解并熟练运用这些技术,将有助于你更有效地处理和展示数据,...

    oracle行列转换例子

    在Oracle数据库中,行列转换是一种常见的数据操作需求,主要用于将数据从行的形式转换为列的形式,或者反之。这种转换在数据分析、报表制作等场景中尤为常见。本文将深入解析一个Oracle行列转换的例子,通过详细解释...

    oracle行列转换总结

    在Oracle数据库中,行列转换是一项常用且强大的功能,它允许数据在不同的维度上进行转换,以便于数据分析和报告。本文将深入探讨Oracle中实现行列转换的几种方法,包括使用`UNION ALL`、`MODEL`子句以及集合类型(`...

    oracle行列转换

    Oracle 行列转换技巧详解 Oracle 行列转换是指将数据库表中的行转换为列或将列转换为行的一种操作。这种操作在实际应用中非常有用,例如在数据报表生成、数据分析和数据挖掘等领域。下面我们将详细介绍 Oracle 行列...

    Oracle中SQL语句行列之间相互转换

    ### Oracle中SQL语句行列之间的相互转换 在Oracle数据库中,有时我们需要将表格中的行转换为列或将列转换为行,这种操作被称为行列转换。这种转换对于数据分析、报表制作等场景非常有用。本文将详细介绍Oracle中...

    oracle行列转换实例

    【Oracle 行列转换实例】 在数据库管理中,有时我们需要将数据表的行与列进行转换,以便于数据分析和报表展示。Oracle 提供了一种高效的方法,即使用分析函数来实现这种行列转换。分析函数主要设计用于处理累计计算...

    Oracle Sql语句转换成Mysql Sql语句

    在数据库管理领域,Oracle SQL和MySQL SQL是两种广泛使用的SQL方言,它们在语法和功能上存在一定的差异。当需要将一个基于Oracle SQL的应用程序迁移到MySQL环境时,就需要进行SQL语句的转换工作。本项目提供了一个...

    oracle动态行转列

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

    基于Delphi的Excel与Oracle数据互转换技术.pdf

    【基于Delphi的Excel与Oracle数据互转换技术】 在信息化管理中,用户常常需要将大量数据从文件导入系统,或从系统导出数据。Excel由于其便捷性和强大的电子表格处理能力,成为许多用户存储和处理数据的主要工具。...

    ORACLE 行列转换

    本文将详细介绍如何在Oracle中实现行转列(即行列转换的一种)以及列转行的操作,分别通过使用`decode`函数和`insert...select`语句来实现。 ### 一、使用`decode`函数进行“行转列” #### 1. **背景与需求** 在...

    Oracle数据库表转换为Mysql

    "Oracle数据库表转换为Mysql" Oracle数据库表转换为Mysql是指将Oracle数据库中的表结构转换为Mysql数据库中的表结构,以便在Mysql数据库中使用。这种转换可以使用PowerDesigner工具来实现。 一、Oracle数据库表...

    Oracle 行列转换 总结

    Oracle 行列转换总结 Oracle 行列转换是指在 Oracle 数据库中将行与列之间进行转换的操作。这种转换有六种情况:列转行、行转列、多列转换成字符串、多行转换成字符串、字符串转换成多列、字符串转换成多行。 1. ...

    oracle行列转换示例

    oracle行列转换示例,查询转换,有创表过程,数据,清晰明了

    Mysql转oracle工具

    MySQL到Oracle转换是一个常见的任务,特别是在企业级应用迁移或整合过程中。这个工具专注于将MySQL的数据库结构和数据转换为Oracle数据库兼容的格式。下面将详细解释这个过程涉及的知识点。 1. **SQL语言的差异**:...

    Oracle 行列转换总结

    ### Oracle 行列转换知识点详解 #### 一、概述 在数据库操作中,行列转换是一项非常实用的功能,尤其是在处理报表数据或需要特定格式输出时。本文档将详细讲解Oracle数据库中的行列转换方法,并通过具体实例来说明...

    oracle 10进制转34进制 sql

    一个SQL脚本函数,10进制转换为34进制。34进制指以0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F、G、H、J、K、L、M、N、P、Q、R、S、T、U、V、W、X、Y、Z为基数做累加。

    oracle sql 行列转换

    行列转换,sys_connect_by_path,row_number等函数的用法

    oracle姓名中文转全拼函数

    Oracle姓名中文转全拼函数是解决在Oracle数据库中处理中文姓名时的一个常见需求,特别是考虑到汉字的多样性和复杂性,包括生僻字和多音字的处理。此函数旨在将中文姓名转换为全拼,方便进一步的数据处理或搜索。下面...

    mysql 数据库转 oracle

    MySQL到Oracle的数据迁移是一项常见的任务,特别是在企业级应用中,可能因为各种原因需要从MySQL迁移到功能更强大的Oracle数据库系统。下面将详细讲解这个过程涉及的关键知识点。 首先,我们需要了解MySQL和Oracle...

Global site tag (gtag.js) - Google Analytics