知识大全 关于oracle的查询结果的行列互换

Posted 数学

篇首语:业精于勤,荒于嬉。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 关于oracle的查询结果的行列互换相关的知识,希望对你有一定的参考价值。

  /*

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

  比如有如下数据:

  ID NAME       KECHENG              CHENGJI

  

     a          语文                

     a          数学                

     b          语文                

     b          数学                

     c          语文                

     c          数学                

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

  NAME       YUWEN                  SHUXUE

  

  a                              

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

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

  首先建立表:

  */

  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                              

  b                              

  c                              

  */

  /*

  其次是用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                              

  b                              

  c                              

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

  */

  select name sum(decode(kecheng 语文 chengji null)) 语文

  sum(decode(kecheng 数学 chengji null)) 数学

  sum(decode(kecheng 英语 chengji null)) 英语

  from fzq

cha138/Article/program/Oracle/201311/18036

相关参考

知识大全 oracle对表的基本操作

  子查询目标  子查询是一种把查询的结果作为参数返回给另一个查询的一种查询  子查询可以让你将多个查询绑定在一起  嵌套子查询  多层子查询  相关子查询  可接受外部的引用  exists/any

知识大全 在oracle中进行列行转换

  固定列数的行列转换如  studentsubjectgrade         student语文  student数学  s

知识大全 ORACLE行列转换-拼成字符串

ORACLE行列转换-拼成字符串  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  前段时间使用OR

知识大全 oracle中的树型查询

  在项目开发中树型结构是经常被使用的通常情况下我们对查询的结果集使用一些免费的js文件就能达到很好的显示效果比如    但是有时候我们需要对下拉列表也提供树型结构(比如论坛的板块跳转)这个时候我们就

知识大全 oracle中的游标使用静态游标

  游标是构建在PL/SQL中用来查询数据获取记录集的指针它让开发者一次访问结果集中一行记录  在oracle中提供了两种游标静态游标ref游标  静态游标静态游标是在编译的时候就被确定然后把结果集复

知识大全 Oracle查询表、视图、序列等信息查询

Oracle查询表、视图、序列等信息查询  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  这几天做

知识大全 oracle多表查询与子查询

  (一)子查询select*fromtableA  whereidoperator(select*fromtableAawhereaid=)  operaor  单条记录子查询(

知识大全 Oracle树查询及相关函数

Oracle树查询及相关函数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Oracle树查询的

知识大全 oracle笔记之简单查询、限定查询和排序

  别名  oracle别名如果别名包含空格特殊字符(如#$)或需区分大小写(Name)需要用双引号把别名引起来  selectenameName  sal*AnnualSalary  fromemp

知识大全 oracle树形结构实行查询

  ORACLE提供了一种树形结构用来实现层次查询  STARTWITH指定查询的根行  CONNECTBY指定父行和子行的关系  PRIOR引用父行  为测试方便使用如下Demo  建立数据库表Tr