• oracle行转列、列转行


     

    一、行转列

    需要将如下格式

    转换为:

    这就是最常见的行转列,主要原理是利用decode函数、聚集函数(sum),结合group by分组实现的

    1. create table test(  
    2.        id varchar2(255) primary key not null,  
    3.        name varchar2(255),  
    4.        course varchar2(255),  
    5.        score varchar2(255)  
    6. );  
    7. insert into test values(sys_guid(),'zhangsan','语文',85);  
    8. insert into test values(sys_guid(),'zhangsan','数学',78);  
    9. insert into test values(sys_guid(),'zhangsan','英语',90);  
    10. insert into test values(sys_guid(),'lisi','语文',73);  
    11. insert into test values(sys_guid(),'lisi','数学',84);  
    12. insert into test values(sys_guid(),'lisi','英语',92);  

    行转列SQL语句为:

    1. select t.name,   
    2.   sum(decode(t.course, '语文', score,null)) as chinese,   
    3.   sum(decode(t.course, '数学', score,null)) as math,   
    4.   sum(decode(t.course, '英语', score,null)) as english   
    5. from test t   
    6. group by t.name   
    7. order by t.name   


    二、列转行

    将如下格式

    转换为

    这就是最常见的列转行,主要原理是利用SQL里面的union

    1. create table test(  
    2.        id varchar2(255) primary key not null,  
    3.        name varchar2(255),  
    4.        ch_score   varchar2(255),  
    5.        math_score varchar2(255),  
    6.        en_score   varchar2(255)  
    7. );  
    8.   
    9. insert into test values(sys_guid(),'zhangsan',88,76,90);  
    10. insert into test values(sys_guid(),'lisi',91,67,82);  

    列转行SQL语句为:

      1. select name, '语文' COURSE , ch_score as SCORE from test    
      2. union select name, '数学' COURSE, MATH_SCORE as SCORE from test    
      3. union select name, '英语' COURSE, EN_SCORE as SCORE from test    
      4. order by name,COURSE 
  • 相关阅读:
    redis报错io.lettuce.core.RedisCommandTimeoutException: Command timed out after
    showloading showtoast一起用
    uniapp,mpvue微信,支付宝兼容性说明
    uniapp 自定义组件
    Vue 函数式组件 functional
    mac uninstall node ,npm from official
    mpvue问题记录:组件方法执行机制
    linux 文件 分割重组
    MySql日期操作
    .NET Core连接数据库
  • 原文地址:https://www.cnblogs.com/zuo-zijing/p/3964580.html
Copyright © 2020-2023  润新知