1. 程式人生 > >Oracle的sys_connect_by_path函式

Oracle的sys_connect_by_path函式

sys_connect_by_path函式

用於多列轉行

語法格式
select … sys_connect_by_path(column_name,’connect_symbol’) from table
start with … connect by … prior

語法說明
column_name,欄位名
connect_symbol,兩個欄位之間的連線符號

start with,開始的地方,遍歷的起點
connect by,來尋找下一條記錄,直到迭代找不到相應記錄為止
指定遞迴(連線)條件,如果條件不滿足則遞迴結束
prior,參考值,寫在誰的前面誰就作為父級值(參照值)

SELECT
    c1 AS ASSAY_EQUIPMENT_ID,
    LTRIM (
        SYS_CONNECT_BY_PATH (c2, ','),
        ','
    ) ASSAY_ITEM_IDS,
    LTRIM (
        SYS_CONNECT_BY_PATH (c3, ','),
        ','
    ) ASSAY_ITEM_NAMES
FROM
    (
        SELECT
            c1,
            c2,
            c3,
            ROW_NUMBER () OVER (PARTITION BY
c1 ORDER BY c2) rn FROM ( SELECT R1.ASSAY_EQUIPMENT_ID c1, R1.ASSAY_ITEM_ID c2, T1.ASSAY_ITEM_NAME c3 FROM CNF_ASSAY_ITEM_EQUI_RELA R1, DIC_ASSAY_ITEM T1 WHERE
R1.ASSAY_ITEM_ID = T1. ID ) ) WHERE CONNECT_BY_ISLEAF = 1 CONNECT BY PRIOR rn + 1 = rn AND PRIOR c1 = c1 START WITH rn = 1