oracle不同列字段字符串連接成一個字符串

Oracle不同列字段字符連接成一個字符串簡單例子:

 

Test表結構:

no---number(22)     text---varchar2(200)

 

數據:

1,  'abc'

1,  'de'

2,  'fgh'

2,   'ijk'

 

要實現的查詢效果:

1,  'abc';'de'

2,  'fgh';'ijk' 

 

 

sql代碼:

 

select no,
       ltrim(max(sys_connect_by_path(text, ';')), ';') as texts
     from (select no,
               text,
               rnFirst,
               lead(rnFirst) over(partition by no order by rnFirst) rnNext
      from (select no,text,
                   row_number() over(order by no, text desc) rnFirst
                  from Test a) tmpTable1) tmpTable2
      start with rnNext is null
      connect by rnNext = prior rnFirst
      group by no;

 

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

 

項目中用到的一個實例,夠BT的,代碼:

 

select ID,
       PRO_NAME,
       PFCAT_NAME,
       PROTYPE_NAME,
       ROLE_CODE,
       PRO_CODE,
       ltrim(max(sys_connect_by_path(USER_NAME, ';')), ';') as ADM_USERS
  from (select ID,
               PRO_NAME,
               PFCAT_NAME,
               PROTYPE_NAME,
               USER_NAME,
               ROLE_CODE,
               PRO_CODE,
               rnFirst,
               lead(rnFirst) over(partition by id order by rnFirst) rnNext
          from (select a.ID,
                       a.PRO_NAME,
                       a.PFCAT_NAME,
                       a.PROTYPE_NAME,
                       a.USER_NAME,
                       a.ROLE_CODE,
                       a.PRO_CODE,
                       row_number() over(order by id desc) rnFirst
                  from (select pro.ID,
                               pro.PFCAT_CODE,
                               pro.BANK_PRO_CODE PRO_CODE,
                               pro.PRO_NAME,
                               pfcat.PFCAT_NAME,
                               PT.PROTYPE_NAME,
                               pm.ROLE_CODE,
                               temp.USER_NAME,
                               pfcat.PFCAT_CODE
                          from products pro
                          join PRO_ROLE_MAP pm on pro.PFCAT_CODE =
                                                  pm.PFCAT_CODE
                          join ADM_POSITIONS ap on ap.ROLE_CODE = pm.ROLE_CODE
                          join PRO_PFCATS pfcat on pro.PFCAT_CODE =
                                                   pfcat.PFCAT_CODE
                          join PRO_TYPES pt ON pro.PROTYPE_CODE =
                                               pt.PROTYPE_CODE
                          left join (SELECT au.USER_NAME, ap.ROLE_CODE
                                      FROM ADM_USERS au
                                      join ADM_USER_POS_MAP map ON au.USER_CODE =
                                                                   map.USER_CODE
                                      join ADM_POSITIONS ap ON map.POS_CODE =
                                                               ap.POS_CODE) temp on temp.ROLE_CODE =
                                                                                    pm.ROLE_CODE
                         where pro.source_type = 'SYS'
                           AND pfcat.pfcat_code = 'TRUST'
                           AND PRO.PRO_CODE NOT in
                               (select distinct p.pro_code
                                  from products_logs log
                                  join products p on log.pro_code = p.pro_code
                                 inner JOIN WKF_EVENTS WE ON log.WFE_ID = WE.ID
                                 WHERE WE.WFG_CODE in
                                       ('WFG_BOND', 'WFG_BROKE', 'WFG_FOREX',
                                        'WFG_FUND', 'WFG_GOLDFX', 'WFG_INS',
                                        'WFG_SAVING', 'WFG_SHARE', 'WFG_SNOTE',
                                        'WFG_TRUST', 'WFG_PROSYS')
                                   AND WE.STEP_STATUS = 'END'
                                   AND WE.ACTION = 'ACCEPT'
                                   AND p.pfcat_code = 'TRUST')) a) tmpTable1) tmpTable2
 start with rnNext is null
connect by rnNext = prior rnFirst
 group by ID, PRO_NAME, PFCAT_NAME, PROTYPE_NAME, ROLE_CODE, PRO_CODE;

發佈了76 篇原創文章 · 獲贊 1 · 訪問量 9327
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章