例如: select a from table1;
   column a 中的数据如下视图
    abcdedf
    ggeifkd
    aaaaa
 一个column 有三行字符串, 如何将这个column a 的三行字符串合并成一行字符串?变成 abcdedfggeifkdaaaaa 的一行?

解决方案 »

  1.   

    数据格式一
    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
      

  2.   

    先谢谢楼上的, 但我要的只是 一个column 中的多行字符串合并成一行字符串啊,也就是说,一条记录, 你的card_code 有 1 回车 1 回车 2 回车 2回车 这四行, 怎么变成 1122的样子 存在于 column card_code 中呢?
      

  3.   

    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
    /
      

  4.   

    写错了,应为:
    SELECT LTRIM(MAX(SYS_CONNECT_BY_PATH(a,' ')),' ') AS LongStr
    FROM (
             SELECT 1 AS ID, a, 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
    /
      

  5.   

    试过了,楼上的方法正确。好像SQL SERVER 2000下没有该功能的语句支持吧,只能写存储函数。