文档章节

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

指尖的舞者
 指尖的舞者
发布于 2012/08/05 12:09
字数 804
阅读 224
收藏 1

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

© 著作权归作者所有

指尖的舞者
粉丝 26
博文 36
码字总数 36912
作品 0
杭州
程序员
私信 提问
mysql横表和纵表以及互转实例

一.纵表 相关建表语句: CREATE TABLE ( int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id', varchar(50) DEFAULT NULL COMMENT '姓名', varchar(50) DEFAULT NULL COMMENT '科目', double......

谢思华
2016/04/06
2.4K
0
数据库表为纵表时转变为横表的设计方法

一. 横表&纵表: 数据库表按照存储的数据结构不同区分为横表与纵表,通过如下数据的存储我们分别对横表与纵表进行简单介绍: 横表: http://www.finereport.com/forumimages/zjkbwzbszbwhb1...

finereport
2011/11/24
718
0
Oracle 大纵表 转 横表的问题

纵表结构如下 内容表:(大概有千万条) create table SHEET_ATTR ( id NUMBER not null, 主键,没有啥意义 name NUMBER not null, 可以理解为表单名称 例如(姓名,性别,地址,电话,等等六十余项)...

boco
2013/05/14
1K
5
基于ESB实现商友与K3财务凭证集成

背景 沈阳XX商场推行O2O营销模式,信息化系统包括:线下零售系统、线上电商系统、网上支付系统,财务核算系统,为了实现线上线下系统互动、财务核算一体化,需要对各系统进行数据集成、系统对...

数通畅联
2014/12/10
255
0
电子商务行业数据集成案例介绍

1 引言 电子商务是一种新兴的、处于发展过程中的现代商务方式,从95年来得到了迅速发展,显现了巨大的现代商业价值。1997年欧洲、美国、新加坡等许多国家政府发表了电子商务发展纲要,其目的...

数通畅联
2016/01/12
116
0

没有更多内容

加载失败,请刷新页面

加载更多

计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
6
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
昨天
10
0
再见 Spring Boot 1.X,Spring Boot 2.X 走向舞台中心

2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 其实早在2018年7月30号,Spring 官方就已经在博客进行过预告,Spring Boot 1.X 将维...

Java技术剑
昨天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部