zoukankan      html  css  js  c++  java
  • 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;
        纵表转横表

       
    Java代码  收藏代码
    1. 纵表结构: TEST_Z2H  
    2. FNAME       FTYPE             FVALUE  
    3. 员工        zaocan              10  
    4. 员工       zhongcan             20  
    5. 员工        wancan               5  
    6.    
    7. 转换后的表结构:  
    8. FNAME     ZAOCAN_VALUE          ZHONGCAN_VALUE       WANCAN_VALUE  
    9. 员工           10                     20                    5  
    10.    
    11. 纵表转横表SQL示例:  
    12. SELECT FNAME,  
    13.        SUM(DECODE(FTYPE,'zaocan',FVALUE,0)) AS ZAOCAN_VALUE,  
    14.        SUM(DECODE(FTYPE,'zhongcan',FVALUE,0)) AS ZHONGCAN_VALUE,  
    15.        SUM(DECODE(FTYPE,'wancan',FVALUE,0)) AS WANCAN_VALUE  
    16.   FROM TEST_Z2H  
    17.  GROUP BY FNAME;  

        横表转纵表
      
    Java代码  收藏代码
    1. 横表结构: TEST_H2Z  
    2.       ID      姓名    语文        数学       英语        
    3.       1       张三     80         90         70              
    4.       2       李四     90         85         95            
    5.       3       王五     88         75         90            
    6.    
    7. 转换后的表结构:    
    8.       ID     姓名     科目     成绩    
    9.       1       张三     语文     80    
    10.       2       张三     数学     90    
    11.       3       张三     英语     70    
    12.       4       李四     语文     90    
    13.       5       李四     数学     80      
    14.       6       李四     英语     99    
    15.       7       王五     语文     85    
    16.       8       王五     数学     96    
    17.       9       王五     英语     88    
    18. 横表转纵表SQL示例:  
    19. SELECT   姓名,'语文'   AS     科目,语文   AS   成绩   FROM   TEST_H2Z   UNION   ALL   
    20. SELECT   姓名,'数学'   AS     科目,数学   AS   成绩   FROM   TEST_H2Z   UNION   ALL   
    21. SELECT   姓名,'英语'   AS     科目,英语   AS   成绩   FROM   TEST_H2Z  
    22. ORDER BY 姓名,科目 DESC;   

    四、这里有一篇用另一种方式实现转换而且带和值查询的博文:http://exceptioneye.iteye.com/blog/1153345
    [/size]
  • 相关阅读:
    PostgreSQL在Update时使用Substring函数截取字符串并且加上CASE WHEN THEN条件判断
    清理Visual Studio 2017的项目历史记录或手工修改Visual Studio 2017的注册表设置
    基于ABP模块组件与依赖注入组件的项目插件开发
    jenkins git can't work ERROR: Timeout after 10 minutes ERROR: Error fetching remote repo 'origin'
    SV randomize
    SV class
    SV coverage
    uvm设计分析——reg
    shell bash-shell
    scrapy的安装
  • 原文地址:https://www.cnblogs.com/feifeihu/p/2965951.html
Copyright © 2011-2022 走看看