zoukankan      html  css  js  c++  java
  • Oracle列转行函数Listagg以及pivot查询示例

    简单的Oracle列转行函数Listagg示例:

    CREATE TABLE tbl_test
    (catalog VARCHAR(1),product VARCHAR(2),amount NUMBER);
    
    INSERT INTO tbl_test VALUES('A','A1',1);
    INSERT INTO tbl_test VALUES('A','A1',2);
    INSERT INTO tbl_test VALUES('B','B1',3);
    INSERT INTO tbl_test VALUES('B','B2',4);
    INSERT INTO tbl_test VALUES('B','B2',5);
    INSERT INTO tbl_test VALUES('C','C1',6);
    INSERT INTO tbl_test VALUES('C','C1',7);
    INSERT INTO tbl_test VALUES('C','C2',8);
    INSERT INTO tbl_test VALUES('C','C2',9);
    COMMIT;


    SELECT * FROM tbl_test;
    
    CATALOG PRODUCT     AMOUNT
    ------- ------- ----------
    A       A1               1 
    A       A1               2 
    B       B1               3 
    B       B2               4 
    B       B2               5 
    C       C1               6 
    C       C1               7 
    C       C2               8 
    C       C2               9 
    
     9 rows selected 
    


    
    
    SELECT
    LISTAGG(product,',') WITHIN GROUP( ORDER BY amount) AS lst
    FROM tbl_test;
    
    LST    
    ----------------------------
    A1,A1,B1,B2,B2,C1,C1,C2,C2 

    SELECT
    catalog, LISTAGG(product,',') WITHIN GROUP( ORDER BY amount) as lst
    FROM tbl_test
    GROUP BY catalog;
    
    CATALOG LST  
    ------- -----------------
    A       A1,A1  
    B       B1,B2,B2  
    C       C1,C1,C2,C2  

    SELECT
    LISTAGG(product||'-'||amount,',') WITHIN GROUP( ORDER BY amount) over (partition by catalog)
    AS lst
    FROM tbl_test
    ;
    
    LST  
    ----------------------
    A1-1,A1-2  
    A1-1,A1-2  
    B1-3,B2-4,B2-5  
    B1-3,B2-4,B2-5  
    B1-3,B2-4,B2-5 
    C1-6,C1-7,C2-8,C2-9   
    C1-6,C1-7,C2-8,C2-9  
    C1-6,C1-7,C2-8,C2-9  
    C1-6,C1-7,C2-8,C2-9  
    
     9 rows selected 


    SELECT * FROM tbl_test
    pivot (
           sum(amount)
    			 FOR(catalog)
    			 IN('A','B','C')
    )
    ORDER BY 1;
    
    PRODUCT        'A'        'B'        'C'
    ------- ---------- ---------- ----------
    A1               3                       
    B1                          3            
    B2                          9            
    C1                                    13 
    C2                                    17 

    SELECT product,EXTRACT(catalog_xml,'//column[@name="SUM(AMOUNT)"]/text()') AS sum
    FROM tbl_test
    pivot xml(
           sum(amount)
    			 FOR(catalog)
    			 IN(ANY)
    )
    ORDER BY 1;
    
    PRODUCT SUM    
    ------- -------
    A1      3      
    B1      3      
    B2      9      
    C1      13     
    C2      17     
    


  • 相关阅读:
    Spring bean
    spring bean初始化及销毁你必须要掌握的回调方法
    一张图搞懂Spring bean的完整生命周期
    获取Spring的ApplicationContext的几种方式
    你必须了解Spring的生态
    Spring的核心模块解析
    Spring 5.0
    纯分享scp协议如何工作
    我眼中的SAML (Security Assertion Markup Language)
    7z文件格式及其源码的分析(五)
  • 原文地址:https://www.cnblogs.com/pekkle/p/6568752.html
Copyright © 2011-2022 走看看