我有一张表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 我爱中国!
谢谢大家!
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 我爱中国!
谢谢大家!
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>
如果我表中的数据是这样的:
ID TOTAL PKNUMBER CONTENT
1 2 1 我爱你,
1 2 2 中国
2 2 2 you!
2 2 1 I love,
3 1 1 我爱,中国!
那么楼上二位的解答,则不正确了。有没有办法把加入的“,”和content中的“,”区分开来?
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;