关于表中字段的连接问题

duqiangcise 2009-10-09 04:28:53
我有一张表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 我爱中国!
谢谢大家!
...全文
134 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
shiyiwan 2009-10-09
  • 打赏
  • 举报
回复
赞一个
duqiangcise 2009-10-09
  • 打赏
  • 举报
回复
在大家的帮助下我自己写了个函数来实现字符连接如下:
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;
duqiangcise 2009-10-09
  • 打赏
  • 举报
回复
楼上两位的解答基本满足要求,不过我有个疑问!
如果我表中的数据是这样的:
ID TOTAL PKNUMBER CONTENT
1 2 1 我爱你,
1 2 2 中国
2 2 2 you!
2 2 1 I love,
3 1 1 我爱,中国!
那么楼上二位的解答,则不正确了。有没有办法把加入的“,”和content中的“,”区分开来?
shiyiwan 2009-10-09
  • 打赏
  • 举报
回复
#1已经有了
shiyiwan 2009-10-09
  • 打赏
  • 举报
回复
select id, replace(wm_concat(CONTENT),',') from (select id, PKNUMBER, CONTENT from test order by id, PKNUMBER) group by id;
hyrongg 2009-10-09
  • 打赏
  • 举报
回复

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>

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧