我有一张表test表,表中的字段有
ID varchar2(20)        
TOTAL         number(20) 
PKNUMBER number(20)
CONTENT        varchar2(20)
今表中的数据有:
ID    TOTAL   PKNUMBER   CONTENT  
1 2 1 我爱你
1 2 2 中国
2 2 2 you!
2 2 1 I love
3 1 1 我爱中国!
TOTAL表示一条记录被分割成的记录总数,
PKNUMBER表示被分割后的记录的位置索引
CONTENT表示记录的内容
ID表示记录ID(该字段不是主键)
注:该表中没有主键。
我要的效果是:
ID相同的记录根据PKNUMBER的次序把CONTENT字段的内容连接起来形成一条完整的记录。
如:
ID CONTENT
1 我爱你中国
2 I love you!
3 我爱中国!
谢谢大家!

解决方案 »

  1.   


    SQL> select * from t; ID TOTAL PKNUMBER CONTENT
    --- ----- -------- ------------------------------
      1     2        1 我爱你
      1     2        2 中国
      2     2        2 you
      2     2        1 I love
      3     1        1 我爱中国SQL> 
    SQL> select id,replace(wmsys.wm_concat(content),',','') content from (
      2    select * from t order by pknumber
      3  ) group by id; ID CONTENT
    --- --------------------------------------------------------------------------------
      1 我爱你中国
      2 I love you
      3 我爱中国SQL> 
      

  2.   

    select id, replace(wm_concat(CONTENT),',') from (select id, PKNUMBER, CONTENT from test order by id, PKNUMBER) group by id;
      

  3.   

    楼上两位的解答基本满足要求,不过我有个疑问!
    如果我表中的数据是这样的:
    ID    TOTAL  PKNUMBER  CONTENT  
    1 2 1 我爱你,
    1 2 2 中国 
    2 2 2 you! 
    2 2 1 I love,
    3 1 1 我爱,中国! 
    那么楼上二位的解答,则不正确了。有没有办法把加入的“,”和content中的“,”区分开来?
      

  4.   

    http://topic.csdn.net/u/20090616/09/d70860d6-ca63-445e-85d7-dad95256b021.html#9
      

  5.   

    在大家的帮助下我自己写了个函数来实现字符连接如下:
    create or replace
    FUNCTION TEST_MY_CONCAT(p_in_id VARCHAR2)
    RETURN VARCHAR2
    AS
    result VARCHAR2(4000);
    BEGIN
    FOR TEMP_CUR IN (SELECT * FROM TEST WHERE ID=p_in_id ORDER BY PKNUMBER ASC) LOOP
    result:= result||TEMP_CUR.CONTENT;
    END LOOP;
    RETURN result;EXCEPTION
    WHEN OTHERS THEN
    RETURN result;END TEST_MY_CONCAT;select id,TEST_MY_CONCAT(id) content
    from  TEST GROUP BY id;