现在又两个表
表一内码  数量  
1001   20
1002   30 
1003   40
1004   50 
......表二内码   代码        名称    
0001   1           外购
0002   2           内购
0003   1.D         白色
0004   1.B         黑色
0005   2.D         白色
0006   2.B         黑色
1001   1.D.101     塑料
1002   1.B.102     塑胶
1003   2.D.103     钢丝
1004   2.D.101     钢材
......要求得到表代码       名称        来源    颜色   数量 
1.D.101     塑料       外购    白色   20
1.B.102     塑胶       外购    黑色   30
2.D.103     钢丝       内购    白色   40
2.D.101     钢材       内购    白色   50后面还有很多内容没列出来,请教用SQL怎么做?谢谢了 !

解决方案 »

  1.   

    表2是怎么个递归法 看不出来
    create function yourfunction(int @innercode) return int
    as
    select 数量 from 表1 where 内码=@innercode
    insert into 表3(列,列,列...) select 代码,名称,..,yourfunction(内码) from 表2
      

  2.   


    declare @tb1 table (内码 int,数量 int)
    insert into @tb1 select 1001,20
        union all select 1002,30
        union all select 1003,40
        union all select 1004,50
    declare @tb2 table (内码 int,代码 nvarchar(10),名称 nvarchar(10))
    insert into @tb2 select 1,'1','外购'
           union all select 2,'2','内购'
           union all select 3,'1.d','白色'
           union all select 4,'1.b','黑色'
           union all select 5,'2.d','白色'
           union all select 6,'2.b','黑色'
           union all select 1001,'1.d.101','塑料'
           union all select 1002,'1.b.102','塑胶'
           union all select 1003,'2.d.103','塑丝'
           union all select 1004,'2.d.104','钢材'
    --select *,row_number()over(partition by len(代码) order by 内码) 层次 from @tb2 
     select a.代码,a.名称,c.名称 as 来源,b.名称 as 颜色,d.数量 from 
    (select * from @tb2 where CHARINDEX('.',代码,3)=4) a left join        
      (select * from @tb2 where CHARINDEX('.',代码)=2 and LEN(代码)=3) b
          on left(a.代码,3)=b.代码 join (select * from @tb2 where CHARINDEX('.',代码)=0) c
           on left(a.代码,1)=c.代码 join @tb1 d on a.内码=d.内码(4 行受影响)(10 行受影响)
    代码         名称         来源         颜色         数量
    ---------- ---------- ---------- ---------- -----------
    1.d.101    塑料         外购         白色         20
    1.b.102    塑胶         外购         黑色         30
    2.d.103    塑丝         内购         白色         40
    2.d.104    钢材         内购         白色         50(4 行受影响)
      

  3.   

    [Quote=引用 1 楼 chowyi 的回复:]
    表2是怎么个递归法 看不出来 
    主要是要在表1中有数量的,我要去表2中的代码,和名称,同时取出表2中:第一个.前面的1,然后在表2中找对对应的1的名称,表2中第二个.前面的1.X,在表2中找出对应的名称,如1.D,表示,白色。
    上面第二个方法可以取出,但是我后面还有很多内容,如果按照那样做的话会很麻烦的!哪位再帮帮忙