日期:2014-05-19  浏览次数:20399 次

如何取得关联数据表的内容
有如下的表,Item表用来存储所有的产品信息,Relation用来存储产品间的组成关系,例如可以用物品A+物品B组成一个物品C,类似超市里所谓的买一送一的产品。

Item表如下;
产品编号         产品名称
1000                 牙膏
1001                 牙刷
1002                 牙膏牙刷套装
1003                 刮胡刀架
1004                 刮胡泡
1005                 刮胡刀片
1006                 刮胡套装

Relation表如下:
Bom编号       关联物料
1002                 1000
1002                 1001
1006                 1003
1006                 1004
1006                 1005

现想将两表合并,并按照BOM编号,循环得到其关联物料编好,并列在BOM产品下面。结果如下:
产品编号         产品名称            
1002                 牙膏牙刷套装
1000                 牙膏
1001                 牙刷
1006                 刮胡套装
1003                 刮胡刀架
1004                 刮胡泡
1005                 刮胡刀片

请大家帮忙看看这个语句该怎么写?我已经被它困扰了两天了。

 


------解决方案--------------------
create table Item(产品编号 int, 产品名称 varchar(20))
insert Item select 1000, '牙膏 '
union all select 1001, '牙刷 '
union all select 1002, '牙膏牙刷套装 '
union all select 1003, '刮胡刀架 '
union all select 1004, '刮胡泡 '
union all select 1005, '刮胡刀片 '
union all select 1006, '刮胡套装 '

create table Relation(Bom编号 int, 关联物料 int)
insert Relation select 1002, 1000
union all select 1002, 1001
union all select 1006, 1003
union all select 1006, 1004
union all select 1006, 1005

select isnull(b.编号,a.关联物料)产品编号 into # from
(select *,(select count(*) from Relation b where b.Bom编号 <a.Bom编号)+1 as '序列 ' from Relation a)a
full join
(select Bom编号 编号,0 '序列 ' from Relation group by Bom编号)b
on b.序列=a.序列
order by isnull(b.编号,a.Bom编号)

select Item.* from # left join Item on Item.产品编号=#.产品编号

drop table #

--我做的有点麻烦我再想想有没有别的办法~
/*
产品编号 产品名称
1002 牙膏牙刷套装
1000 牙膏
1001 牙刷
1006 刮胡套装
1003 刮胡刀架
1004 刮胡泡
1005 刮胡刀片
*/
------解决方案--------------------

create table Item
(产品编号 varchar(100),
产品名称 varchar(100)

)
go
insert into Item
select '1000 ', '牙膏 '
union all select '1001 ', '牙刷 '
union all select '1002 ', '牙膏牙刷套装 '
union all select '1003 ', '刮胡刀架 '
union all select '1004 ', '刮胡泡 '
union all select '1005 ', '刮胡刀片 '
union all select '1006 &#