zoukankan      html  css  js  c++  java
  • Oracle 列转行&行转列

    列转行
     
    方法一:
    create table tb_student(
           id number(4) ,
           name varchar2(20),
           course varchar2(20),
           score number(5,2)
    );
    insert into tb_student values(1,'张三','语文',81);
    insert into tb_student values(2,'张三','数学',75);
    insert into tb_student values(3,'李四','语文',86);
    insert into tb_student values(4,'李四','数学',90);
    insert into tb_student values(5,'王五','语文',81);
    insert into tb_student values(6,'王五','数学',100);
    insert into tb_student values(7,'王五','英语',90);
    commit;
    select * from tb_student;
    select
        name,
        sum(case course when '数学' then score else null end) 数学,
        sum(case course when '英语' then score else null end) 英语,
        sum(case course when '语文' then score else null end) 语文
    from
        tb_student
    group by name;
     
     
    create table zyy1(
    ID1 number,
    ID2 number,
    VALUE1 VARCHAR2(20),
    VALUE2 VARCHAR2(20)
    )
    INSERT INTO ZYY1 VALUES(1,2,'A','B');
    INSERT INTO ZYY1 VALUES(1,2,'C','D');
    INSERT INTO ZYY1 VALUES(1,2,'E','F');
    INSERT INTO ZYY1 VALUES(1,2,'G','H');
    INSERT INTO ZYY1 VALUES(3,8,'I','J');
    INSERT INTO ZYY1 VALUES(3,8,'K','L');
    INSERT INTO ZYY1 VALUES(3,8,'M','N');
    INSERT INTO ZYY1 VALUES(8,9,'O','P');
    INSERT INTO ZYY1 VALUES(8,9,'Q','R');
    INSERT INTO ZYY1 VALUES(11,12,'S','T');
    commit;
    select ID1,ID2,
    MAX(DECODE(RN,1,VALUE1)),
    MAX(DECODE(RN,1,VALUE2)),
    MAX(DECODE(RN,2,VALUE1)),
    MAX(DECODE(RN,2,VALUE2)),
    MAX(DECODE(RN,3,VALUE1)),
    MAX(DECODE(RN,3,VALUE2))
    FROM (SELECT ZYY1.*, ROW_NUMBER() OVER(partition by ID1,ID2  order by value1,value2) rn from zyy1) T
    where rn<=3
    group by ID1,ID2;
     
     
     
    --北京耗材中使用的例子
    select hosid,
           sum(case CATALOGNAME
                 when '国械注准20173461407' then
                  cnts
                 else
                  null
               end) 国械注准20173461407,
           sum(case CATALOGNAME
                 when '国械注进20173461507' then
                  cnts
                 else
                  null
               end) 国械注进20173461507,
           sum(case CATALOGNAME
                 when '国械注进20173466565' then
                  cnts
                 else
                  null
               end) 国械注进20173466565
      from (select hosid,
                   BASE_CATALOG.CATALOGNAME CATALOGNAME,
                   sum(BASE_DEMANDSCALE.Purcount) cnts
              from BASE_CATALOG
              left join BASE_DEMANDSCALE
                on BASE_DEMANDSCALE.CATALOGUEID =  BASE_CATALOG.catalogid
             where hosid = 'BJ_H0001'
             group by hosid, catalogid, CATALOGNAME)
    group by hosid;
     
    方法二 pivot:
     
    create table tb_student(
           id number(4) ,
           name varchar2(20),
           course varchar2(20),
           score number(5,2)
    );
    insert into tb_student values(1,'张三','语文',81);
    insert into tb_student values(2,'张三','数学',75);
    insert into tb_student values(3,'李四','语文',86);
    insert into tb_student values(4,'李四','数学',90);
    insert into tb_student values(5,'王五','语文',81);
    insert into tb_student values(6,'王五','数学',100);
    insert into tb_student values(7,'王五','英语',90);
    commit;
      select name, 语文, 数学, 英语
        from (select name, course, score from tb_student)
        pivot(max(score) for course in('语文' 语文,'数学' 数学,'英语'  英语))
       order by name
     
      select hosid,
             国械注准20173461407,
             国械注进20173461507,
             国械注进20173466565      
        from (select hosid, CATALOGNAME,  sum(BASE_DEMANDSCALE.Purcount) cnts
                from BASE_CATALOG
                left join BASE_DEMANDSCALE
                  on BASE_DEMANDSCALE.CATALOGUEID =  BASE_CATALOG.catalogid        
               group by hosid, catalogid, CATALOGNAME
               order by hosid, CATALOGNAME) pivot(max(cnts) for  CATALOGNAME in('国械注准20173461407'
                                                                                国械注准20173461407,
                                                                                '国械注进20173461507'
                                                                                国械注进20173461507,
                                                                                '国械注进20173466565'
                                                                                国械注进20173466565
                                                                              ))
       order by hosid;
     
    行转列:
     
    方法一  UNPIVOT:
    CREATE   TABLE  pvt (VendorID  int , Emp1  int , Emp2  int ,
          Emp3  int , Emp4  int , Emp5  int );
      INSERT   INTO  pvt  VALUES  ( 1 , 4 , 3 , 5 , 4 , 4 );
      INSERT   INTO  pvt  VALUES  ( 2 , 4 , 1 , 5 , 5 , 5 );
      INSERT   INTO  pvt  VALUES  ( 3 , 4 , 3 , 5 , 4 , 4 );
      INSERT   INTO  pvt  VALUES  ( 4 , 4 , 2 , 5 , 5 , 4 );
      INSERT   INTO  pvt  VALUES  ( 5 , 5 , 1 , 5 , 5 , 5 );
        
      SELECT  VendorID, Employee, Orders
      FROM  
         ( SELECT  VendorID, Emp1, Emp2, Emp3, Emp4, Emp5
          FROM  pvt) p
      UNPIVOT
         (Orders  FOR  Employee  IN  
            (Emp1, Emp2, Emp3, Emp4, Emp5)
      ) ;
     
  • 相关阅读:
    ABAP方法的exporting类型参数,需要在方法实现最开始显式初始化么
    Hybris里类似ABAP Netweaver的DDIC
    Hybris里类似ABAP Netweaver的DDIC
    SAP Cloud for Customer的CTI呼叫中心解决方案
    如何处理SAP HANA Web-Based Development Workbench的403 Forbidden错误
    Jerry's spark demo application
    SAP CRM WebClient UI和Hybris Commerce里的跨组件跳转
    SAP Cloud for Customer和Hybris Commerce的session保护机制
    SAP ABAP SQL的execution plan和cache
    SAP CRM呼叫中心里的事件注册机制
  • 原文地址:https://www.cnblogs.com/hcy-zyy/p/14782678.html
Copyright © 2011-2022 走看看