日期:2014-05-17  浏览次数:20823 次

求一替代料算法
table如下,org_item表示“原物料”,new_item表示“新物料”。
即原物料可以用新物料替代,同样,新物料也可以替代原物料
create table t(
       org_item varchar(10),
       new_item varchar(10)
);
insert into t values('a','d');
insert into t values('b','c');
insert into t values('b','d');
insert into t values('x','y');


希望得到如下结果:
料号      群组号
a         1
b         1
c         1
d         1
x         2
y         2

即:a、b、c、d是一组料号,它们相互可以替代;x、y是一组料号

请教各位童鞋,该如何写SQL,procedure也可

谢谢!
------解决方案--------------------
该回复于2012-11-22 14:14:21被管理员删除
------解决方案--------------------
看不到回复,唉
------解决方案--------------------
看来还是求人不如求己啊
declare
  v_group_id        number;
  v_org_item        number;
  v_new_item        number;
  v_insert_group_id number;
  v_insert_item_id  number;
begin
  delete t2;
  delete t_result;
  insert into t2
    select org_item, new_item, rownum from t;
  loop
    if v_group_id is not null then
      select max(group_id), max(new_item)
        into v_insert_group_id, v_insert_item_id
        from (select a.group_id, new_item
                from t2 a, t_result b, t_result c
               where a.org_item = b.item
                 and a.new_item = c.item(+)
                 and b.group_id = v_group_id
                 and c.item is null
              union
              select a.group_id, org_item
                from t2 a, t_result b, t_result c
               where a.new_item = b.item
                 and a.org_item = c.item(+)
                 and b.group_id = v_group_id
             &nb