oracle双重for循环sql,买卖双方匹配,类似程序中的双重循环,可以用一个SQL语句实现吗?...

说明:已经有了一个帖子,http://www.itpub.net/thread-1780629-1-1.html ,但是感觉和这个要求不完全一样,所以再来问问大家啊;

create table t_sell(商品编号  varchar2(20), bs_flag  varchar2(2),  姓名  varchar2(20),  数量 number , 卖方序号 number);

insert into t_sell values('A01', 'S', '张三' , 5, 1);

insert into t_sell values('A01', 'S', '李四' , 12, 2);

insert into t_sell values('A01', 'S', '王五' , 5, 3);

insert into t_sell values('A01', 'S', '赵六' , 5, 4);

create table t_buy(商品编号  varchar2(20), bs_flag  varchar2(2), 姓名  varchar2(20),  数量 number , 买方序号 number);

insert into t_buy values('A01', 'B', 'TOM' , 10, 1);

insert into t_buy values('A01', 'B', 'MIKE' , 20, 2);

insert into t_buy values('A01', 'B', 'JOHN' , 30, 3);

insert into t_buy values('A01', 'B', 'SAM' , 40, 4);

t_sell表存放全部的卖出情况,t_buy表存放全部的买入情况。

对于t_sell的每一行,到t_buy里去找对应的good_id的情况进行配对(按照 order_number列的顺序),配对后,各自的数量都减少了配对的数量,把这次配对的买卖双方、货物名称、数量记录到另外的表里,

简单算法:

对t_sell 的按order_number排序的结果,对其中每一行,循环

对 t_buy中的每一行,循环

如果t_buy中有和外循环相同的good_id,就找出t_sell的amount、t_buy的amount中的较小值,t_sell和t_buy都减去较小值,

如果外循环t_buy中的amount减少到0,exit,寻找下一个t_sell中的数据

内循环结束

外循环结束

第1次配对, t_sell中的第1个记录、t_buy中的第1个记录进行匹配,t_sell中的第1个记录被配对结束;   B/S 都减少了 5;

第2次配对, t_sell中的第2个记录、t_buy中的第1个记录进行匹配,t_buy中的第1个记录被配对结束;   B/S 都减少了 5;

第3次配对, t_sell中的第2个记录、t_buy中的第2个记录进行匹配,t_sell中的第2个记录被配对结束;   B/S 都减少了 7;

第4次配对, t_sell中的第3个记录、t_buy中的第2个记录进行匹配,t_sell中的第3个记录被配对结束;   B/S 都减少了 5;

第5次配对, t_sell中的第4个记录、t_buy中的第2个记录进行匹配,t_sell中的第4个记录被配对结束;   B/S 都减少了 5;

此时t_sell已经没有记录了,配对结束;

创建匹配结果表如下:

create table  t_result(商品编号  varchar2(20),  卖方姓名  varchar2(20), 买方姓名  varchar2(20),   配对量 number,  卖方序号  varchar2(20),     买方序号  varchar2(20)  );

现在需要在t_result表中,插入如下内容:

商品编号   卖方姓名   买方姓名     配对量     卖方序号    买方序号

A01          张三       TOM          5           1           1

A01          张三       TOM          5           2           1

A01          李四       MIKE         7           2           2

A01          王五       MIKE         5           3           2

A01          赵六       MIKE         5           4           2

1,如何写一个SQL语句,给t_result表中,插入上面的内容呢?

2,如果一个SQL语句不能完成,只能写PL/SQL的双重循环了,一个SQL语句、与PL/SQL双重循环,哪个效率高呢?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值