关于oracle的查询结果的行列互换

Posted

tags:

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

参考技术A

  /*

  在实际使用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

lishixinzhi/Article/program/Oracle/201311/18036

SQL 实现行列互换

Oracle:不过大多数是采用 oracle 数据库当中的一些便捷函数进行处理,比如 ”pivot”;

MySql:目前没有找到更好的方法

题目:数据库中有一张如下所示的表,表名为sales。

季度销售量
1991 1 11
1991 2 12
1991 3 13
1991 4 14
1992 1 21
1992 2 22
1992 3 23
1992 4 24


要求:写一个SQL语句查询出如下所示的结果。

一季度二季度三季度四季度
1991 11 12 13 14
1992 21 22 23 24


我给出的答案是这样的:

1 select 年, 
2 sum(case when 季度=1 then 销售量 else 0 end) as 一季度, 
3 sum(case when 季度=2 then 销售量 else 0 end) as 二季度, 
4 sum(case when 季度=3 then 销售量 else 0 end) as 三季度, 
5 sum(case when 季度=4 then 销售量 else 0 end) as 四季度 
6 from sales group by 年;

 

以上是关于关于oracle的查询结果的行列互换的主要内容,如果未能解决你的问题,请参考以下文章

oracle查询结果怎么行列转换

Oracle 表格行列转换,高手请进

sql行列互换

oracle中一个表的行列转换

oracle 行列转换

写sql,怎么将查询结果的行列转换呀?