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
and c.item is null) a