Oracle PL/SQL 合并文本列

项目中遇到一个需求,需要将多行合并为一行。
表结构如下:
NAME                            Null           Type
------------------------   ---------   -----
N_SEC_CODE                 NOT NULL  CHAR(6)
C_RESEARCHER_CODE   NOT NULL  VARCHAR2(20)

此表保存了“股票”与“研究员”的对应关系数据,一般而言,对于同一只股票而言,可能有多个研究员
对其进行跟踪研究。所以目前遇到一个要求,需查询出每只股票和对应的研究员(研究员代码间,使用逗号分隔)。
例如有如下数据:
000297                                    chenpeng            
000297                                    liusu               
合并处理后需显示为:
000297                                    chenpeng,liusu

方法1:
SELECT    n_sec_code, TRANSLATE ( LTRIM  ( text ' / ' ),  ' */ ' ' *, ' ) researcherList
    
FROM  ( SELECT  ROW_NUMBER ()  OVER  (PARTITION  BY  n_sec_code  ORDER   BY  n_sec_code,
                  lvl 
DESC ) rn,
                 n_sec_code, 
text
            
FROM  ( SELECT      n_sec_code,  LEVEL  lvl,
                             SYS_CONNECT_BY_PATH (c_researcher_code,
' / ' text
                        
FROM  ( SELECT    n_sec_code, c_researcher_code  as  c_researcher_code,
                                       ROW_NUMBER () 
OVER  (PARTITION  BY  n_sec_code  ORDER   BY  n_sec_code,c_researcher_code) x
                                  
FROM  m_researcher_stock_rel
                              
ORDER   BY  n_sec_code, c_researcher_code) a
                  CONNECT 
BY  n_sec_code  =  PRIOR n_sec_code  AND  x  -   1   =  PRIOR x))
   
WHERE  rn  =   1
ORDER   BY  n_sec_code;

方法2(10g):
SELECT n_sec_code, wmsys.wm_concat (c_researcher_code) as result
FROM m_researcher_stock_rel
GROUP BY n_sec_code

 

http://www.cnblogs.com/heekui/archive/2009/07/30/1535516.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值