A表结构
XLMC ZDMC ZDXH
101路 广达集团 1
101路 华北陶瓷 2
101路 公路管理所 3
101路 塘沽中专 4
101路 胡家园 5
101路 滨海客运总站 6
101路 胡北路 7
101路 五车地 8
101路 新河船厂 9
101路 滨海龙都小区 10
101路 塘沽车站 11
101路 实验学校 12
101路 工人新村 13
101路 区政府 14
101路 世纪广场 15
101路 金元宝商厦 16
101路 海河外滩公园 17
101路 东大街 18
101路 新华路 19
101路 公安街 20
101路 塘沽向阳楼 21
101路 老弯道 22
101路 朝阳楼 23
101路 春风里 24
101路 朝阳小学 25
目标表结构
xlmc zdxx
101路 广达集团,华北陶瓷,公路管理所,塘沽中专,胡家园,滨海客运总站,胡北路,五车地,新河船厂,滨海龙都小区,塘沽车站,实验学校,工人新村,区政府,世纪广场,金元宝商厦,海河外滩公园,东大街,新华路,公安街,塘沽向阳楼,老弯道,朝阳楼,春风里,朝阳小学如何将a转换成目标表的结构?
也就是将A表的ZDMC按ZDXH顺序组成一行。
最好是能直接用sql语句直接实现。
请大虾们帮忙吧!
XLMC ZDMC ZDXH
101路 广达集团 1
101路 华北陶瓷 2
101路 公路管理所 3
101路 塘沽中专 4
101路 胡家园 5
101路 滨海客运总站 6
101路 胡北路 7
101路 五车地 8
101路 新河船厂 9
101路 滨海龙都小区 10
101路 塘沽车站 11
101路 实验学校 12
101路 工人新村 13
101路 区政府 14
101路 世纪广场 15
101路 金元宝商厦 16
101路 海河外滩公园 17
101路 东大街 18
101路 新华路 19
101路 公安街 20
101路 塘沽向阳楼 21
101路 老弯道 22
101路 朝阳楼 23
101路 春风里 24
101路 朝阳小学 25
目标表结构
xlmc zdxx
101路 广达集团,华北陶瓷,公路管理所,塘沽中专,胡家园,滨海客运总站,胡北路,五车地,新河船厂,滨海龙都小区,塘沽车站,实验学校,工人新村,区政府,世纪广场,金元宝商厦,海河外滩公园,东大街,新华路,公安街,塘沽向阳楼,老弯道,朝阳楼,春风里,朝阳小学如何将a转换成目标表的结构?
也就是将A表的ZDMC按ZDXH顺序组成一行。
最好是能直接用sql语句直接实现。
请大虾们帮忙吧!
解决方案 »
- 在存储过程是否可以通过DB_Link调用另外一个数据库的存储过程
- 崩溃中。。 怎么才可以查出来、?。。
- 关于查询出来的数据小计的问题(按时间每周小计)
- 50分求助..................
- 表删除一条记录后,用最后一条记录补充,如何实现?急!!
- 我在cb中调用存储过程提示:“提供者或其他服务返回E_FAIL状态“这是怎么回事呢?
- 9i,建立资料库的时候,是在原有数据库上建?还是新建?我建了两个库了,一个oradb,一个mydb???
- 请求支援!关于网络资源的问题。
- 有两台电脑.怎么用它们来学习oracle?
- Oracle8.1.6 internal的初始口令是什么?在线等候
- ORACLE 语句 右连接 疑问
- OID帐号创建的问题
group by b.XLMC;
select XLMC,ZDMC,ZDXH from A order by XLMC,ZDXH
2,打开游标CUR1,fetch一条数据到(TMP_XLMC,TMP_ZDMC,TMP_ZDXH),如果是第一次fetch,则设置TMP_KEY_XLMC=TMP_XLMC,TMP_KEY_ZDMC=TMP_ZDMC,如果是第一次以后则进行下面的判断
IF TMP_XLMC == TMP_KEY_XLMC THEN
TMP_KEY_ZDMC = TMP_KEY_ZDMC ||','|| TMP_ZDMC;
ELSE
INSERT INTO B(xlmc,zdxx) VALUES (TMP_KEY_XLMC,TMP_KEY_ZDMC);
TMP_KEY_ZDMC = TMP_ZDMC;
TMP_KEY_XLMC = TMP_XLMC;
END IF;
3,CLOSE游标CUR1,COMMIT;
group by b.XLMC;有结果了但是 zdxx内容 的顺序变了呢?不是按zdxh拼的字符串啊?
select XLMC,WMSYS.WM_CONCAT(ZDMC) from A
group by XLMC
其他的就写存储过程吧
group by XLMC
tmp_xlmc A.xlmc%type;
tmp_zdmc A.zdmc%type;
tmp_zdxh A.zdxh%type;
key_xlmc B.xlmc%type;
key_zdxx B.zdxx%type;
CURSOR c0 is
select xlmc,zdmc,zdxh from A ORDER BY xlmc,zdxh;
BEGIN
OPE c0; FETCH c0 INTO (key_xlmc,key_zdxx,tmp_zdxh); LOOP
FETCH c0 INTO (tmp_xlmc,tmp_zdmc,tmp_zdxh);
EXIT WHEN c0%NOTFOUND;
IF tmp_xlmc=key_xlmc THEN
key_zdxx := key_zdxx || ',' || tmp_zdmc;
ELSE
INSERT INTO B (xlmc,zdxx) values (key_xlmc,key_zdxx);
key_xlmc := tmp_xlmc;
key_zdxx := tmp_zdmc;
END IF;
END LOOP; IF key_xlmc IS NOT NULL THEN
INSERT INTO B(xlmc,zdxx) values(key_xlmc,key_zdxx);
END IF; COMMIT;
CLOSE co;
END;
/