/*

在实际使用sql工作中总会碰到将某一列的值放到标题中显示.就是总说的行列转换或者互换.

比如有如下数据:

ID NAME KECHENG CHENGJI

-- ---------- -------------------- -------

1 a 语文 80

2 a 数学 70

3 b 语文 40

4 b 数学 100

5 c 语文 90

6 c 数学 92

那末我要求显示的结果是:

NAME YUWEN SHUXUE

---------- ---------------------- ----------------------

a 80 70

也就是说把课程这一列放到行上显示.把成绩按照课程分配到相对应的行.

我只介绍2中简单易用的方法,使用游标或者建立临时表的方法就不介绍了.效率很慢,不易理解.

首先建立表:

*/

create table fzq

(

id varchar(),

name varchar(),

kecheng varchar(),

chengji varchar()

);

--插入数据:

insert into fzq values ('','a','语文','');

insert into fzq values('','a','shuxue','');

insert into fzq values ('','b','yuwen','');

insert into fzq values ('','b','shuxu','');

insert into fzq values ('','c','yuwen','');

insert into fzq values ('','c','shuxu','');

/*首先使用union.如果课程这列有多个值,那么脚本的代码就很长了.*/

select name,sum(yuwen) yuwen,sum(shuxue) shuxue from

(

select name,chengji yuwen,'' shuxue from fzq

where kecheng='yuwen' union

select name,'' yuwen,chengji shuxue

from fzq

where kecheng='shuxue'

) aaa

group BY name;

/*执行结果:

NAME YUWEN SHUXUE

---------- ---------------------- ----------------------

a 80 70

b 40 100

c 90 92

*/

/*

其次是用case.这种方法代码比较短.适合列值很多的情况.

*/

select name, sum(case kecheng when 'yuwen' then chengji end) yuwen,

sum(case kecheng when 'shuxue' then chengji end) shuxue

from fzq

group by name;

/*执行结果:

NAME YUWEN SHUXUE

---------- ---------------------- ----------------------

a 80 70

b 40 100

c 90 92

所有例子在oracle中测试,sql server没有测试,请根据实际情况修改

如果有更好的方法,欢迎交流.

*/

横表和纵表

第一张图就是横表,一行表示了一个实体记录,这就是我们传统的设计表的形式

第二张图就是纵表,他的一行记录,是用于表示某个学生的属性名和属性值对应关系,像这边有两个属性(名字和性别),在纵表中就要用两条记录来表示一个学生。

从上面可以观察出,横表的好处是清晰可见,一目了然,但是有一个弊端,如果现在要把这个表加一个字段,那么就必须重建表结构。对于这种情况,在纵表中只需要添加一条记录,就可以添加一个字段,所消耗的代价远比横表小,但是纵表的对于数据描述不是很清晰,而且会造成数据库数量很多,两者利弊在于此。所以,应该把不容易改动表结构的设计成横表,把容易经常改动不确定的表结构设计成纵表。

在实际开发中,经常需要互相转换横表和纵表的形式,这里贴个从纵表数据转成横表显示的形式。

纵表转横表

sql代码:

Select student_no,

max(decode(field_name,'student_name',field_value)) As student_name,

max(decode(field_name,'student_sex',field_value )) As student_sex

From cuc_student_y Group By student_no;

SQL(横表和纵表)行列转换,PIVOT与UNPIVOT的区别和使用方法举例,合并列的例子

使用过SQL Server 2000的人都知道,要想实现行列转换,必须综合利用聚合函数和动态SQL,具体实现起来需要一定的技巧,而在SQL Server 2005中,使用新引进的关键字PIVOT/UN ...

ORACLE 横表与纵表

一.横表和纵表 横表:通常指我们平时在数据库中建立的表,是一种普通的建表方式.       (主键.字段1.字段2......)如:时间.客户ID,基本通话费.漫游通话费,国内长途费.国际长途费... ...

SQL 查询横表变竖表

SQL 查询横表变竖表   /*普通行列转换 假设有张学生成绩表(tb)如下:Name Subject Result张三 语文 74张三 数学 83张三 物理 93李四 语文 74李四 数学 84李四 ...

(总结)Oracle 11g常用管理命令(用户、表空间、权限)

1.启动oracle数据库: 从root切换到oracle用户进入:su - oracle 进入sqlplus环境,nolog参数表示不登录:sqlplus /nolog 以管理员模式登录:sqlpl ...

Oracle中如何实现Mysql的两表关联update操作

在看的时候,发现MySQL提供了一种两表关联update操作.原文如下: UPDATE items,month SET items.price=month.p ...

oracle数据库_实例_用户_表空间之间的关系(转)

数据库:Oracle数据库是数据的物理存储.这就包括(数据文件ORA或者DBF.控制文件.联机日志.参数文件).其实Oracle数据库的概念和其它数据库不一样,这里的数据库是一个操作系统只有一个库.可 ...

oracle表结构和表内容差异比对

oracle表结构和表内容差异比对 oracle中有三种集合操作,他们会把左边和右边的select 结果集进行集合操作. union 并集 intersect 交集 minus 差集 假设有如下两张表 ...

oracle创建表之前判断表是否存在,如果存在则删除已有表

Mysql 创建表之前判断表是否存在,如果存在则删除已有表 DROP TABLE IF EXISTS sys_area; CREATE TABLE sys_area ( id int NOT NULL ...

ORACLE创建表之前判断表是否存在与SQL Server 对比使用

在SQL Server 数据库中,我们在创建表之前删除表,有if exit()这样的语句,但是在oracle中却没有.如果直接使用drop table那么如果表不存在会报错,导致后续语句无法运行.因此 ...

随机推荐

WordPress目录文件结构详细说明

根目录 |-wp-admin | |-css | |-images | |-includes | |-js | |-maint | |-network | |-user |-wp-content | ...

socket.io与redis构建实时推送

准备工作 1:准备nodejs环境 2:使用npm工具安装 socket.io  npm install socket.io 3:下载客户端socket.io文件 解压附件中的文件 node app. ...

循环语句until和while

一.until语句的基本格式 until 条件测试 do 语句块 done 只要条件测试语句未成功结束,则执行语句块.(如果一开始条件测试语句就成功退出,那么一次也不执行语句块.这里跟C语言中的do. ...

linux 常用find命令

1.查找当前目录下以test开头的所有文件-会进入子目录中去查找 [root@rusky hgfs]# find -name test* 2.查找当前目录下名为test.txt的文件-会进入子目录中去 ...

Enable-Migrations 在应用程序配置文件中找不到xx连接字符串

在解决方案中有多个项目时,使用Enable-Migrations 命令进行数据迁移时,出现以下错误: 尝试在Enable-Migrations 命令中指定-projectName也不行,最后将要操作的 ...

[SOJ] DAG?

Description 输入一个有向图,判断该图是否是有向无环图(Directed Acyclic Graph). Input 输入的第一行包含两个整数n和m,n是图的顶点数,m是边数.1<=n ...

《Python数据分析常用手册》一、NumPy和Pandas篇

一.常用链接: 1.Python官网:https://www.python.org/ 2.各种库的whl离线安装包:http://www.lfd.uci.edu/~gohlke/pythonlibs/ ...

数据挖掘&lowbar;requests模块的post方法

前面已经跟大家讲了requests模块的get方法,这一篇文章我们要介绍的是requests模块中的另一个比较常用的方法,post方法 post方法的形式相比于get要复杂一些,这时因为post在提交 ...

C&num;调用endtask

原文最早发表于百度空间2009-03-23 写这个小工具主要是因为自动化测试那边反馈了一个问题和endtask有关,结果写完之后发现这个问题从程序外部测试不了……c#调endtask主要也是用DllI ...

CS229 6&period;7 Neurons Networks whitening

PCA的过程结束后,还有一个与之相关的预处理步骤,白化(whitening) 对于输入数据之间有很强的相关性,所以用于训练数据是有很大冗余的,白化的作用就是降低输入数据的冗余,通过白化可以达到(1)降 ...

oracle 行列对应,Oracle行列互换 横表和纵表相关推荐

  1. mysql unpivot_SQL(横表和纵表)行列转换,PIVOT与UNPIVOT的区别和使用方法举例,合并列的例子...

    使用过SQL Server 2000的人都知道,要想实现行列转换,必须综合利用聚合函数和动态SQL,具体实现起来需要一定的技巧,而在SQL Server 2005中,使用新引进的关键字PIVOT/UN ...

  2. oracle查询表中的某一行,oracle查看所有表及各表行数?

    在Oracle数据库中,查看所有表及对应个表的行数,只用一个select语句查询table_name和num_rows两个字段即可.table_name是表名,num_rows代表表的行数. 具体如下 ...

  3. dotConnect for Oracle入门指南(四):将数据插入表

    [下载dotConnect for Oracle最新版本] dotConnect for Oracle(原名OraDirect.NET)建立在ADO.NET技术上,为基于Oracle数据库的应用程序提 ...

  4. Oracle 优化器_访问数据的方法_单表

    Oracle 在选择执行计划的时候,优化器要决定用什么方法去访问存储在数据文件中的数据.我们从数据文件中查询到相关记录,有两种方法可以实现:1.直接访问表记录所在位置.2.访问索引,拿到索引中对应的r ...

  5. oracle 表连接 大表小表_优化必备基础:Oracle中常见的三种表连接方式

    在Oracle SQL语句中,如果from后面有多个表时,表的连接方式是一个很重要的考量. 从Oracle 6开始,优化器就支持下面4种表连接方式: - 嵌套循环连接(Nested Loop Join ...

  6. oracle 增加ora容量_oracle数据库报错:ORA-01653无法在表空间扩展解决办法 ,增加表空间或表空间增加数据文件...

    当Oracle数据库的数据量越来越大,表空间的大小不够用的时候,会报错:"ORA-01653 ", 即表空间满了,无法在表空间扩展解决办法 ,增加表空间或表空间增加数据文件.在这里 ...

  7. Oracle 数据库表空间不足拓展方法实例演示,表空间剩余大小查看,通过新增表空间文件拓展表空间,表空间文件路径查看

    Oracle 数据库表空间 第一章:表空间的拓展 ① 查看剩余表空间大小 ② 查看表空间文件路径 ③ 通过新增表空间文件拓展表空间 ④ 查看表空间已分配大小 第一章:表空间的拓展 ① 查看剩余表空间大 ...

  8. oracle创建表空间 扩展表空间文件 修改表空间自动增长

    1. 创建表空间 create tablespace SIRM2  datafile 'D:\oracle\product\10.2.0\oradata\orcl\SIRM2.dbf' size 10 ...

  9. Oracle 原理:高水位线、PCTFREE、PCTUSED、索引组织表、簇表、临时表

    目录 1.11g中表的类型: 2.高水位线HWM,(High Water Mark) 3.PCTFREE 和PCTUSED: 4. move.shrink.truncate来降低高水位线 5.IOT表 ...

最新文章

  1. Silverlight 2 数据绑定演示程序(附源代码下载)
  2. 单片机彩灯移动实验_单片机课程设计彩灯实验.doc
  3. PLM Integration
  4. idea的maven project消失解决方案
  5. nts包如何下周 php_windows下PHP7安装方法(ts版和nts版)
  6. MySQL Cookbook 学习笔记-02
  7. 深拷贝的缺点_拷贝?还傻傻分不清深浅?
  8. MySQL对含有中文字符的字段排序
  9. 虚拟机android原生系统下载地址,Android x86开源项目最新版虚拟机镜像下载VM/Vbox...
  10. Java课程中实际项目案例分析
  11. Python课程第九周笔记及作业+第十周期末测试
  12. 软件开发过程学习笔记(一)之软件开发流程
  13. fifo的rdata_同步Fifo和异步fifo
  14. TPS5430正电源转正负电源 低纹波
  15. WDS服务--网络安装系统(自动部署装机Windows系统)
  16. 三亚游—温暖的寒冬、蔚蓝的海和安九拉
  17. 全方位移动全向轮、麦克纳姆轮底盘运动学逆解详解(内含电机输出方程)
  18. 星级评价的代码php,JavaScript_使用jQuery实现星级评分代码分享,前面有一篇原生js实现星级评 - phpStudy...
  19. PHP中的网络编程 -- Socket篇
  20. Cy5/FITC/CY3/CY7-Nab-PTX ,荧光标记白蛋白结合型紫杉醇

热门文章

  1. 2020数据分析表达式( DAX函数)
  2. 【转载】电路中各电源符号名称与意义
  3. org.springframework.web.servlet.DispatcherServlet‘ is not assignable to javax.servlet.Servlet
  4. 2021-06-21Leetcode.39组合总和
  5. layui弹出层的表单验证
  6. ADO.NET三层架构
  7. 霸屏系统软件 /超级爆店码/霸屏系统源码
  8. 雷神之锤3源代码注释(1)
  9. rg1 蓝光危害rg0_天猫中国日-2019纽约春夏时装周_2019春夏中国时装周
  10. 吴恩达机器学习(三)模型描述