当前位置: 代码迷 >> Oracle开发 >> 求oracle中, 怎么把表中一条记录中多行字符串合并成一行字符串-
  详细解决方案

求oracle中, 怎么把表中一条记录中多行字符串合并成一行字符串-

热度:38   发布时间:2016-04-24 07:55:53.0
求oracle中, 如何把表中一条记录中多行字符串合并成一行字符串----在线等
例如:   select   a   from   table1;
      column   a   中的数据如下视图
        abcdedf
        ggeifkd
        aaaaa
  一个column   有三行字符串,   如何将这个column   a   的三行字符串合并成一行字符串?变成   abcdedfggeifkdaaaaa   的一行?




------解决方案--------------------
数据格式一
CARD_CODE Q
--------- ------------------------------------------------
001 quarter_1
001 quarter_2
001 quarter_3
001 quarter_4
002 quarter_1
002 quarter_2
002 quarter_3
002 quarter_4

数据格式二
CARD_CODE Q
--------- --------------------------------------------
002 quarter_1;quarter_2;quarter_3;quarter_4
001 quarter_1;quarter_2;quarter_3;quarter_4

从格式一到格式二

SELECT t1.card_code, substr(MAX(sys_connect_by_path(t1.q, '; ')), 2)
FROM (SELECT a.card_code,
a.q,
row_number() over(PARTITION BY a.card_code ORDER BY a.q) rn
FROM t_change_lc_comma a) t1
START WITH t1.rn = 1
CONNECT BY t1.card_code = PRIOR t1.card_code
AND t1.rn - 1 = PRIOR t1.rn
GROUP BY t1.card_code
------解决方案--------------------
SELECT LTRIM(MAX(SYS_CONNECT_BY_PATH(a, ' ')), ' ') AS LongStr
FROM (
SELECT 1 AS ID, ROW_NUMBER() OVER (ORDER BY a) AS curr
, ROW_NUMBER() OVER (ORDER BY a) -1 AS prev
FROM table1
)
START WITH curr = 1
CONNECT BY prev = PRIOR curr
GROUP BY ID
/
------解决方案--------------------
试过了,楼上的方法正确。好像SQL SERVER 2000下没有该功能的语句支持吧,只能写存储函数。
------解决方案--------------------
在存储过程中游标循环出每条记录的值,然后定义字符串拼起来,哈哈
  相关解决方案