您的位置:首页 > 其它

SYS_CONNECT_BY_PATH 函数综合应用 应用多字段拼在一行字符串

2017-12-07 14:24 771 查看
SELECT

    f.nowdate AS "nowdate",

    f.DAYOFWEEK "dayofweek",

    f.WEEKOFMONTH AS "weekofmonth",

    f.YEARMONTH "yearmonth",

    COUNT (1) AS "messageNum",

    LTRIM (

        MAX (

            SYS_CONNECT_BY_PATH (f.C2 || ',' || f.state, '|') -----------SYS_CONNECT_BY_PATH函数主要作用是可以把一个父节点下的所有子节点通过某个字符进行区分,然后连接在一个列中显示。

        ) KEEP (

            DENSE_RANK LAST -------------DENSE_RANK是排序策略 FIRST/LAST就是对数据进行筛选了

            ORDER BY

                f.pnum

        ),

        '|'
    ) AS "message"

----------------------------------------------

FROM

    (

        SELECT

            A .nowdate,

            A .yearmonth,

            A .weekofmonth,

            A .dayofweek,

            A .state,

            b.c2,

            ROW_NUMBER () OVER (

                PARTITION BY A .nowdate

                ORDER BY

                    b.c2

            ) AS pnum,       ----------------------------按照日期进行生成序号排序(生产序号的方法通过over()函数里面的语句来控制。


            ROW_NUMBER () OVER (

                PARTITION BY A .nowdate

                ORDER BY

                    b.c2

            ) - 1 AS lnum

        FROM

            skin_serve A

        LEFT JOIN SYS_COMPANY B ON A .SURVERUNIT = b. ID

        WHERE

            A .del_flag = '0'

        AND A .yearmonth = '201711'

    ) f

GROUP BY

    f.DAYOFWEEK,

    f.WEEKOFMONTH,

    f.NOWDATE,

    f.YEARMONTH CONNECT BY f.lnum = PRIOR f.pnum

AND f.nowdate = PRIOR f.nowdate START WITH f.pnum = 1 -----------------根据排序建树状结构

-------------------------------------------------------------------------------------

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: