zoukankan      html  css  js  c++  java
  • 【转】Oracle行列互换

    原文:http://xace.javaeye.com/blog/434537

    /*  

    在实际使用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(2),   
    name varchar(10),   
    kecheng varchar(20),   
    chengji varchar(3)   
    );   
      
      
    --插入数据:   
    insert into fzq values ('1','a','语文','80');   
    insert into fzq values('2','a','shuxue','70');   
    insert into fzq values ('3','b','yuwen','40');   
    insert into fzq values ('4','b','shuxu','100');   
    insert into fzq values ('5','c','yuwen','90');   
    insert into fzq values ('6','c','shuxu','92');   
      
    /*首先使用union.如果课程这列有多个值,那么脚本的代码就很长了.*/  
      
    select name,sum(yuwen) yuwen,sum(shuxue) shuxue from   
    (   
    select name,chengji yuwen,'0' shuxue from fzq   
    where kecheng='yuwen' union   
    select name,'0' 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没有测试,请根据实际情况修改  
     
    如果有更好的方法,欢迎交流.  
    */ 
  • 相关阅读:
    js—初始的二维数组是一个,3行4列的数组。将其转换为4行3列的二维数组
    js_求1—10000的完数
    JS——输入一个日期判断该日期为当年的第几天
    JS——打印倒三角和正三角
    Java内存机制和内存地址
    deepin下搭建基于github和hexo的个人博客
    URL and URI 的 比较
    Cannot use this in a static context
    java项目获取文件路径总结
    利用exe4j制作exe文件
  • 原文地址:https://www.cnblogs.com/ungshow/p/1605469.html
Copyright © 2011-2022 走看看