`

oracle SQL 行、列转换

 
阅读更多

oracle SQL竖表转横表(行转列)

 
T_T_STUDENT表查询记录如下,要转成横表
 
      姓名     课程     成绩
1     张飞     语文     80
2     张飞     数学     87
3     关羽     语文     97
4     张飞     英语     68
5     关羽     数学     53
6     刘备     语文     90
 
create table T_T_STUDENT
(
  name   VARCHAR2(20),
  course VARCHAR2(20),
  score  NUMBER(10)
)
 
方法一:
--用decode实现,
SELECT T.NAME,
       SUM(DECODE(T.Course, '语文', T.Score)) 语文,
       SUM(DECODE(T.Course, '数学', T.Score)) 数学,
       SUM(DECODE(T.Course, '英语', T.Score)) 英语
  FROM T_T_STUDENT T
GROUP BY T.NAME
 
方法二:
--用case  when 实现
SELECT T.NAME,
       SUM(CASE T.Course WHEN '语文' THEN T.Score ELSE 0 END) 语文,
       SUM(CASE T.Course WHEN '数学' THEN T.Score ELSE 0 END) 数学,
       SUM(CASE T.Course WHEN '英语' THEN T.Score ELSE 0 END) 英语
  FROM T_T_STUDENT T
GROUP BY T.NAME
输出结果如下:
      姓名     语文  数学  英语
1     刘备     90     94     92
2     关羽     97     53     95
3     张飞     80     87     68
 
 区别如果条件是单一值时,用decode比较简便,如果判断条件比较复杂是用case when实现
 
 
oracle SQL横表转竖表(列转行)
这儿要用到另一的技巧就是笛卡尔乘积,将一行复制成三行,每一行取一个类型的电话 
偷个懒儿把上边的结果表叫r表,把列还原成行的SQL:  
#1.空的还为空
with r as(
SELECT T.NAME,
       SUM(DECODE(T.Course, '语文', T.Score)) 语文,
       SUM(DECODE(T.Course, '数学', T.Score)) 数学,
       SUM(DECODE(T.Course, '英语', T.Score)) 英语
  FROM T_T_STUDENT T
GROUP BY T.NAME
)
select r.name,
decode(lvl,1,'语文',2,'数学',3,'英语') corse,
decode(lvl,1,r.语文,2,数学,3,英语) score
from r,
(select level lvl from dual connect by level<=3)

#2.空的填0
with r as (
SELECT T.NAME,
       SUM(CASE T.Course WHEN '语文' THEN T.Score ELSE 0 END) 语文,
       SUM(CASE T.Course WHEN '数学' THEN T.Score ELSE 0 END) 数学,
       SUM(CASE T.Course WHEN '英语' THEN T.Score ELSE 0 END) 英语
  FROM T_T_STUDENT T
GROUP BY T.NAME)

select r.name,
decode(lvl,1,'语文',2,'数学',3,'英语') corse,
decode(lvl,1,r.语文,2,数学,3,英语) score
from r,
(select level lvl from dual connect by level<=3)
 
 2. 11g 自带的行列转换
11g在SELECT语句中新加了关键词PIVOTUNPIVOT,用这两个关键词,重写上面的两个查询,就变成这个样子的了:
行变列:
select * from t_t_student
pivot
(max(score) for course in('语文' as 语文,'数学' as 数学,'英语' as 英语))
 
列变行:
正在研究,没弄出来呢
 
分享到:
评论

相关推荐

    Oracle Sql语句转换成Mysql Sql语句

    当需要将一个基于Oracle SQL的应用程序迁移到MySQL环境时,就需要进行SQL语句的转换工作。本项目提供了一个Java源码工具,能够帮助用户便捷地将Oracle SQL语句转换为MySQL SQL语句。 Oracle SQL与MySQL SQL的主要...

    Sql,oracle数据表行转列问题

    SQL行转列问题是指将行记录转换为列记录的操作。本文将详细讲解SQL行转列问题的解决方案,并提供了一个具体的实例来帮助读者更好地理解该问题。 问题描述 假设我们有一个学生成绩表tb,包含姓名、课程和分数三个...

    Oracle数据库sql转换mysql数据库工具

    "Oracle数据库sql转换mysql数据库工具" 提供了解决这一问题的解决方案,允许用户将Oracle数据库中的SQL语句或数据结构转换为MySQL兼容的格式。 在数据库迁移过程中,这样的工具至关重要,因为它可以简化工作流程,...

    Oracle行转列(不定列)

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

    Oracle行转列之pivot

    这个例子中,pivot_clause对sal列求和,pivot_for_clause指定了deptno作为要转换的列,而pivot_in_clause定义了deptno的值范围,从而确定了转换列的数量。 此外,PIVOT操作还隐含地执行了GROUP BY操作,它使用了...

    oracle动态行转列

    Oracle的动态行转列技术,通过巧妙利用存储过程和动态SQL,为数据分析师和开发者提供了一种强大且灵活的数据转换工具。无论是对于初学者还是有经验的数据库管理员,掌握这一技能都将极大地提升数据处理的效率和效果...

    Sql语法转换为Oracle语法

    标题“Sql语法转换为Oracle语法”涉及到的主要知识点是SQL Server与Oracle数据库之间的SQL语句转换。这通常是因为在系统迁移或跨平台开发时,需要将SQL Server的查询语句适应Oracle数据库的语法。 描述中提到的...

    sqlserver自动生成sql语句工具sqlserver转oracle

    在企业级应用中,有时需要在不同的数据库系统间进行数据迁移或兼容性处理,这就涉及到了SQL Server到Oracle的数据转换。本篇文章将详细探讨如何利用工具实现SQL Server自动生成SQL语句并转换到Oracle。 首先,标题...

    oracle行转列

    1. PIVOT操作:Oracle 11g开始引入了PIVOT关键字,它允许用户直接在SQL查询中将行数据转换为列数据。例如,假设有一个销售数据表,包含产品ID、年份和销售额三个字段,我们可以通过PIVOT操作将不同年份的销售额转换...

    Oracle SQLServer行列转换

    ### Oracle SQLServer 行列转换知识点详解 #### 一、SQLServer 行转列方法 在SQLServer中,实现行转列的操作有两种主要方法:一种是利用`CASE...WHEN`语句配合`GROUP BY`聚合函数的方式;另一种是通过`PIVOT`操作...

    oracle sql 行列转换

    在Oracle SQL中,行列转换是一种常见的数据操作需求,主要用于将数据表中的行转换为列,或将列转换为行,以此来满足不同的数据展示或分析需求。这种转换在处理多维度数据、汇总数据或是进行复杂查询时特别有用。下面...

    oracle 行转列

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

    oracle到sqlserver存储过程语法转换

    ### Oracle到SQL Server存储过程语法转换详解 在数据库迁移项目中,从Oracle迁移到SQL Server是一种常见的场景。本文旨在提供一份详细的指南,帮助开发者更好地理解这两种数据库系统在存储过程方面的语法差异,并...

    oracle通过sql实现字符串转数字oracle函数

    在Oracle数据库中,将字符串转换为数字是一项常见的操作,特别是在处理包含数字的字符串列时,可能需要进行数值计算或按照数值大小进行排序。本篇文章将深入探讨如何在SQL查询中利用Oracle提供的函数来实现这一目标...

    OracleSQL的优化.pdf

    Oracle SQL 优化 Oracle SQL 优化是数据库性能优化的关键部分。为了提高数据库的性能,我们需要从五个方面进行调整:去掉不必要的大型表的全表扫描、缓存小型表的全表扫描、检验优化索引的使用、检验优化的连接技术...

    记使用Oracle SQL Developer 迁移MySql 数据至 Oracle.docx

    在IT领域,数据库迁移是一项常见的任务,特别是在不同的数据库系统之间,如从MySQL迁移到Oracle。本文将详细讲解如何使用Oracle...通过遵循这些指南,可以有效地将MySQL数据库转换为Oracle数据库,实现数据的无缝转移。

    SQL Server 到 Oracle 的SQL 语法自动翻译器源码

    该转换过程负则将SQL Server的 一些语法特性翻译为Oracle支持的形式,也包括常用的函数, 支持复杂的SQL,例如嵌套/子查询等。 这是小弟为了一个Oracle项目的应急之作,我们的系统(Delphi的三层架构)一直运行...

    精通OracleSQL第2版.zip

    6. **数据类型和转换**:详述Oracle支持的各种数据类型,以及如何在不同数据类型间进行转换,确保数据的正确存储和处理。 7. **数据库安全**:讲解用户管理、权限控制和角色设置,以保护数据库的安全性和完整性。 ...

Global site tag (gtag.js) - Google Analytics