有如下的表,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 刮胡刀片请大家帮忙看看这个语句该怎么写?我已经被它困扰了两天了。
产品编号 产品名称
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 刮胡刀片请大家帮忙看看这个语句该怎么写?我已经被它困扰了两天了。
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, 1005select 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','刮胡套装'
go
create table Relation
(
Bom编号 varchar(100),
关联物料 varchar(100)
)
goinsert into Relation
select '1002','1000'
union all select '1002','1001'
union all select '1006','1003'
union all select '1006','1004'
union all select '1006','1005'
goselect a.[产品编号],a.[产品名称] ,isnull(b.[Bom编号],'')+a.产品编号 as 排序 from Item a
left join Relation b
on a.产品编号=b.关联物料
order by 排序
left join Relation b
on a.产品编号=b.关联物料
order by isnull(b.[Bom编号],'')+a.产品编号
--我改了一下我以前的~~还是发上来看看吧
select isnull(b.编号,a.关联物料)产品编号
,(select 产品名称 from Item bb where bb.产品编号=isnull(b.编号,a.关联物料))产品名称
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编号)
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, 1005select a.[产品编号],a.[产品名称] from Item a
left join Relation b
on a.产品编号=b.关联物料
order by isnull(b.Bom编号,a.产品编号),b.Bom编号