有如下的表,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        刮胡刀片请大家帮忙看看这个语句该怎么写?我已经被它困扰了两天了。 

解决方案 »

  1.   

    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 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        刮胡刀片
    */
      

  2.   


    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 排序
      

  3.   

    select a.[产品编号],a.[产品名称]  from Item a
    left join Relation b
    on a.产品编号=b.关联物料 
    order by isnull(b.[Bom编号],'')+a.产品编号
      

  4.   

    --你做的不对哦
    --我改了一下我以前的~~还是发上来看看吧
    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编号)
      

  5.   

    这样:
    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编号
      

  6.   

    多谢w75251455(砍破)和wangdehao(找找找(现在很幸福))的热心帮助,你们给的代码都可以帮助我得到想要得结果,佩服啊,谢谢。