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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值