[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]
分享到:
相关推荐
oracle 9i pl/sql程序设计笔记。
横表转纵表亦可用与decode意义相似的case语句实现,原理同该语句,这里不再过多描述。
Tom经典大作,Oracle Database 9i/10g/11g编程艺术深入数据库体系结构中文版
测试在linux6。Oracle11.2.0.4下,完美使用。 把sbbdpt.o和ssbbded.o复制到/u01/app/oracle/product/11.2.0/dbhome...make -f $ORACLE_HOME/rdbms/lib/ins_rdbms.mk BBED=$ORACLE_HOME/bin/bbed $ORACLE_HOME/bin/bbed
Oracle Database 9i/10g/11g编程艺术深入数据库体系结构中文版
3、使用Oracle存储过程实现横表转纵表结构,无需繁琐的手动操作,一键执行,适合处理大批量数据转换任务,极大提升数据处理效率。 4、资源中提供了自己验证需要的业务数据、数据库表DDL脚本,可验证学习。 5、本内容...
Oracle Database 9i/10g/11g编程艺术深入数据库体系结构中文版
主要介绍了oracle普通表转化为分区表的方法,官方给出了四种操作方法,本文主要对第四种方法进行详细分析,需要的朋友可以参考下。
oracle 9i所有版本最新下载链接 直接迅雷下载 Oracle9i Database Release 2 Enterprise/Standard/Personal Edition for Windows NT/2000/XP ...
主要介绍了Oracle数据库的实例/表空间/用户/表之间关系简单讲解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
oracle 11g for win32位下载地址:http://download.oracle.com/otn/nt/oracle11g/xe/OracleXE112_Win32.zip 适合Win7系统。 直接在迅雷或其它下载工具里新建任务,复制地址上去就可以下载了。本人已经下载成功!
权威PL/SQL语言参考书
ORACLE表生成MYSQL建表DDL
oracle数据库创建脚本 #!/bin/sh OLD_UMASK=`umask` umask 0027 mkdir -p /oradata mkdir -p /u01/app/oracle/admin/tdrb/adump mkdir -p /u01/app/oracle/admin/tdrb/dpdump mkdir -p /u01/app/oracle/admin/tdrb...
通过对源码的抽取,将函数,存储过程,以及它们的调用关系和数据操作形式以报告的形式呈现给使用者。 通过对函数、变量、宏、类型成员、表、列和存储过程的名称进行订正,使报告更加简洁、明了,使源码阅读、分析、...
各种弱口令字典(ftp/oracle/tomcat/domino)、web目录
Oracle9i PL/SQL从入门到精通
oracle pl/sql实例精讲student数据库模式
http://download.oracle.com/otn/solaris/oracle11g/R2/solaris.sparc64_11gR2_database_1of2.zip http://download.oracle.com/otn/solaris/oracle11g/R2/solaris.sparc64_11gR2_database_2of2.zip grid 11g r2: ...