zoukankan      html  css  js  c++  java
  • 行拆分,列合并

    SOURCE: 

    OBJECT:

    用DB2临时表递归查询得到结果:  

    WITH n(id,str,beg_pos,end_pos) AS(
    SELECT id,TEXT||',', 1,locate(',',TEXT||',') FROM TEST_
    UNION ALL
    SELECT id,str,end_pos+1,LOCATE(',',str,end_pos+1) FROM n 
    WHERE LOCATE(',',str,end_pos+1)>0
    )
    SELECT id,SUBSTR(str,beg_pos,end_pos-beg_pos) FROM n ORDER BY ID

     ========================================================================================

    源表:LX_TMP1

    结果集:

     

    专用SQL:

    SELECT ID,LISTAGG(OLDNAME,',')
    FROM LX_TMP1
    GROUP BY ID

    通用SQL:

    WITH LX_TMP2(ID,NEWOLDNAME,SN)AS (
    SELECT ID,OLDNAME,SN
    FROM
    (SELECT ID,OLDNAME,ROW_NUMBER() OVER(PARTITION BY ID ORDER BY OLDNAME ) AS SN
    FROM LX_TMP1)
    WHERE SN = 1
    UNION ALL
    SELECT T1.ID,T1.OLDNAME||','||T2.NEWOLDNAME AS NEWOLDNAME,T1.SN
    FROM
    (SELECT ID,OLDNAME,ROW_NUMBER() OVER(PARTITION BY ID ORDER BY OLDNAME ) AS SN FROM LX_TMP1 ) T1,LX_TMP2 T2
    WHERE T1.ID = T2.ID AND T1.SN = T2.SN + 1
    )
    --SELECT * FROM LX_TMP2
    SELECT ID,NEWOLDNAME FROM LX_TMP2 WHERE (ID,SN) IN(SELECT ID,MAX(SN)
    FROM LX_TMP2
    GROUP BY ID)

     原理:

  • 相关阅读:
    C struct的内存对齐
    C++ 继承、函数重载
    C++ 操作符重载
    C中入栈顺序和运算顺序有关系吗?
    Java 关于finally、static
    C++ 类的复制控制
    Linux中vi的使用
    C++ 类的头文件、实现、使用
    (web)个人项目(挖宝网)
    MariaDB使用enum和set
  • 原文地址:https://www.cnblogs.com/revo/p/8873160.html
Copyright © 2011-2022 走看看