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

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

WBOY
WBOYOriginal
2016-06-07 17:18:071437Durchsuche

Oracle 横表/纵表用场以及它们之间的相互转换,在平时的开发过程中,可能会遇到字段的添加或者更好的维护和管理大数据量的表,就

一、横表和纵表
横表:通常指我们平时在数据库中建立的表,是一种普通的建表方式。
      (主键、字段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

    纵表转横表

  • 纵表结构: TEST_Z2H   
  • FNAME       FTYPE             FVALUE   
  •     
  • 转换后的表结构:   
  • FNAME     ZAOCAN_VALUE          ZHONGCAN_VALUE       WANCAN_VALUE   
  •     
  • 纵表转横表SQL示例:   
  • SELECT FNAME,   
  •   FROM TEST_Z2H   
  •  GROUP BY FNAME;  
  •  横表转纵表

  • 横表结构: TEST_H2Z   
  •       ID      姓名    语文        数学       英语         
  •     
  • 转换后的表结构:     
  •       ID     姓名     科目     成绩     
  • 横表转纵表SQL示例:   
  • ORDER BY 姓名,科目 DESC;   
  • 四、这里有一篇用另一种方式实现转换而且带和值查询的文章 Oracle 横表、纵表一点记录  见

     

     

    linux

    Stellungnahme:
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn