`
Damon_Zhang
  • 浏览: 71897 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle 横表/纵表用场以及它们之间的相互转换

 
阅读更多
[size=x-large]一、横表和纵表
横表:通常指我们平时在数据库中建立的表,是一种普通的建表方式。
      (主键、字段1、字段2......)如:时间、客户ID,基本通话费、漫游通话费,国内长途费、国际长途费....。
纵表:一般不多见,在表结构不确定的时候,如需增加字段的情况下的一种建表方式。
二、执行效率
    横表:后台数据库管理员操作简单,直观,清晰可见,一目了然。但若要给横表中添加一个或者多个字段,就须重建表结构。
    纵表:对于横表的弊端,纵表中只需要添加一条记录,就可以添加一个字段,所消耗的代价远比横表小。但是纵表的对于数据描述不是很清晰,而且会造成数据库数量很多。在查询的时候用到group等函数会大大降低执行效率。纵表的初始映射要慢一些,纵表的变更的映射可能要快一些,如果只是改变了单个字段时,毕竟横表字段比纵表要多很多。
三、转换
1.在平时的开发过程中,可能会遇到字段的添加或者更好的维护和管理大数据量的表,就 会涉及到纵表和横表之间的转换。
2.把不容易改动表结构的设计成横表,把容易经常改动不确定的表结构设计成纵表。
举例:
注:DECODE函数是ORACLE PL/SQL的功能强大的函数之一,目前还只有ORACLE公司的SQL提供了此函数,DECODE(value,if1,then1,if2,then2,if3,then3,...,else),表示如果value等于if1时,DECODE函数的结果返回then1,...,如果不等于任何一个if值,则返回else。
   sign函数:在数学和计算机运算中,其功能是取某个数的符号(正或负): 当x≥0,sign(x)=1; 当x<0, sign(x)=-1;
    纵表转横表

   
纵表结构: TEST_Z2H
FNAME       FTYPE             FVALUE
员工        zaocan              10
员工       zhongcan             20
员工        wancan               5
 
转换后的表结构:
FNAME     ZAOCAN_VALUE          ZHONGCAN_VALUE       WANCAN_VALUE
员工           10                     20                    5
 
纵表转横表SQL示例:
SELECT FNAME,
       SUM(DECODE(FTYPE,'zaocan',FVALUE,0)) AS ZAOCAN_VALUE,
       SUM(DECODE(FTYPE,'zhongcan',FVALUE,0)) AS ZHONGCAN_VALUE,
       SUM(DECODE(FTYPE,'wancan',FVALUE,0)) AS WANCAN_VALUE
  FROM TEST_Z2H
 GROUP BY FNAME;

    横表转纵表
  
横表结构: TEST_H2Z
      ID      姓名    语文        数学       英语      
      1       张三     80         90         70            
      2       李四     90         85         95          
      3       王五     88         75         90          
 
转换后的表结构:  
      ID     姓名     科目     成绩  
      1       张三     语文     80  
      2       张三     数学     90  
      3       张三     英语     70  
      4       李四     语文     90  
      5       李四     数学     80    
      6       李四     英语     99  
      7       王五     语文     85  
      8       王五     数学     96  
      9       王五     英语     88  
横表转纵表SQL示例:
SELECT   姓名,'语文'   AS     科目,语文   AS   成绩   FROM   TEST_H2Z   UNION   ALL 
SELECT   姓名,'数学'   AS     科目,数学   AS   成绩   FROM   TEST_H2Z   UNION   ALL 
SELECT   姓名,'英语'   AS     科目,英语   AS   成绩   FROM   TEST_H2Z
ORDER BY 姓名,科目 DESC; 

四、这里有一篇用另一种方式实现转换而且带和值查询的博文:http://exceptioneye.iteye.com/blog/1153345
[/size]
2
1
分享到:
评论

相关推荐

    Oracle数据库实战:一键执行批量将横表转纵表(横向表转纵向表)

    3、使用Oracle存储过程实现横表转纵表结构,无需繁琐的手动操作,一键执行,适合处理大批量数据转换任务,极大提升数据处理效率。 4、资源中提供了自己验证需要的业务数据、数据库表DDL脚本,可验证学习。 5、本内容...

    Oracle 数据显示 横表转纵表

    在数据库管理中,数据的展示方式有时需要从横表(也称为宽表)转换为纵表(也称为窄表),以便于分析或更方便地呈现数据。Oracle数据库提供了多种方法来实现这种转换,其中一种常见的方式是使用DECODE函数或者CASE...

    简洁好用的数据库表结构文档工具,支持MySQL/MariaDB/SqlServer/oracle/PostgreSQL/TIDB

    简洁好用的数据库表结构文档工具,支持MySQL/MariaDB/SqlServer/oracle/PostgreSQL/TIDB/CacheDB 数据库。简洁好用的数据库表结构文档工具,支持MySQL/MariaDB/SqlServer/oracle/PostgreSQL/TIDB/CacheDB 数据库。...

    Oracle Database 9i/10g/11g编程艺术深入数据库体系结构2.pdf

    Tom经典大作,Oracle Database 9i/10g/11g编程艺术深入数据库体系结构中文版

    oracle普通表转化为分区表的方法

    Oracle数据库中的分区表是一种高级的表组织形式,它将大表分成多个较小的部分,每个部分称为一个分区,以提高查询性能和管理效率。当表的大小超过2GB时,官方推荐使用分区表,因为它们在处理大量数据时具有显著优势...

    Oracle8 PL/SQL程序设计

    3. **块结构**:理解PL/SQL的三种块类型——声明块、执行块和异常处理块,以及它们在程序中的作用和使用场景。 4. **子程序**:学习如何定义和调用函数、存储过程,以及了解参数传递的方式,包括IN、OUT、IN OUT...

    linux oracle 建表,表空间以及删除命令

    本篇文章主要介绍了 Oracle 数据库管理命令,包括建立表空间、删除表空间、改变表空间状态、扩展表空间等多方面的知识点。 一、建立表空间 在 Oracle 数据库中,建立表空间是数据库管理的基础步骤之一。建立表空间...

    Oracle PL/SQL实战(待续)

    Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据处理能力与PL的程序设计特性,是Oracle数据库系统中用于创建存储过程、函数、触发器和包的主要工具。在这个"Oracle PL/SQL实战(待续)"的主题中,我们将深入...

    Oracle数据库的实例/表空间/用户/表之间关系简单讲解

    本文将深入讲解Oracle数据库中实例、表空间、用户和表之间的关系。 首先,我们需要理解Oracle数据库的基本结构。一个完整的Oracle数据库由两大部分组成:Oracle数据库本身和数据库实例。数据库是存储在磁盘上的物理...

    Oracle9i PL/SQL程序设计

    权威PL/SQL语言参考书

    六分钟学会创建Oracle表空间的步骤[转]

    标题与描述均提到了“六分钟学会创建Oracle表空间的步骤”,这暗示了文章旨在提供一个快速学习如何在Oracle数据库中创建表空间的教程。Oracle表空间是数据库中用于存储数据的一个逻辑容器,每个表空间由一个或多个...

    Mysql的表对象Sql语句转换单表,转换成Oracle创建表sql

    标题提到的"‘Mysql的表对象Sql语句转换单表,转换成Oracle创建表sql’"是一个处理这种转换的工具或过程。 首先,让我们理解这个过程的一般步骤: 1. **数据迁移需求分析**:在开始转换之前,了解源MySQL表的结构...

    Oracle PL/SQL实例精解 数据库建立代码

    在"Oracle PL/SQL实例精解 数据库建立代码"中,我们将深入探讨如何在Oracle数据库中使用PL/SQL来构建一个名为"student"的模式,这包括创建数据库对象如表、索引,以及填充样本数据。 首先,"student"模式可能包含一...

    Oracle数据库表转换为Mysql

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

    oracle pl/sql从入门到精通 配套源代码

    Oracle PL/SQL是一种强大的编程语言,它结合了SQL(结构化查询语言)的数据库操作功能与PL/SQL的程序设计特性,广泛应用于Oracle数据库的开发和管理。这本书"Oracle PL/SQL从入门到精通"的配套源代码,显然是为了...

    Oracle的表结构转成Mysql的表结构

    ### Oracle的表结构转成MySQL的表结构 #### 功能概述 本文介绍了一种将Oracle数据库中的表结构转换为MySQL数据库表结构的方法。通过编写一个PL/SQL函数`fnc_table_to_mysql`来实现这一目标。该函数可以接受四个参数...

    Oracle的pl/sql和sqlplus

    总的来说,Oracle的PL/SQL和SQL*Plus是数据库管理员和开发人员的强大工具,它们提供了丰富的功能,用于编写复杂的数据库逻辑,执行高效的数据操作,以及维护和管理存储过程、函数和触发器等数据库对象。通过这些实践...

    简洁好用的数据库表结构文档工具,支持MySQL/MariaDB/SqlServer/Oracle/PostgreSQL/TIDB/CacheDB 数据库

    简洁好用的数据库表结构文档工具,支持MySQL/MariaDB/SqlServer/Oracle/PostgreSQL/TIDB/CacheDB 数据库

    Oracle临时表空间满的解决步骤

    解决 Oracle 临时表空间满的问题需要通过查看当前数据库的默认临时表空间、查看当前临时表空间的大小、创建新的临时表空间、将新建的临时表空间设置为数据库的默认临时表空间、删除原来的临时表空间、创建新的临时表...

    程序逻辑抽取器-c/c++/esql/oracle/informix/mysql代码分析、查看工具

    通过对源码的抽取,将函数,存储过程,以及它们的调用关系和数据操作形式以报告的形式呈现给使用者。 通过对函数、变量、宏、类型成员、表、列和存储过程的名称进行订正,使报告更加简洁、明了,使源码阅读、分析、...

Global site tag (gtag.js) - Google Analytics