看着头晕晕.不过.如果数据量不大的话,通过建多个临时表,处理中间数据, 然后再通过中间数据得到要返回的结果集.这样每步都很清晰,也不难吧.
需要循环的话.下面是大致处理模式declare @i int
declare @Count int 
set  @count = count(1)  from 你要处理的原始表及其连接
set @i =1 WHile (@i<=@count)
Begin
     在这里处理数据将结果放到中间表中
     set @i=@i+1
End最后在这里 通过union 或 join 等方式 取得最后的结果集.能用临时表的话,就能把数据分级处理,这样很方便.

解决方案 »

  1.   

    ghostzxp(幽灵) 
    set  @count = count(1)  from 你要处理的原始表及其连接 
    是我开始临表里的半成品数吗?好像还是有点不对啊,你说的中间表是不是同时也有半成品和原料的啊?那我不是还要再在这张中间表中查找啊?
    谢谢各位,再帮我看看
    解决马上结帖
      

  2.   

    以下存储过程输出为:原料、原料需要量、bomid
    ---------------------------------------------------------
    create procedure sp_getqty(@invtid varchar(20)) --成品ID
    as
    begin
        declare @i int
        set @i = 1
        
        select 
            b.invtid,b.qtyreq,b.bomid,@i as level
        into #t
        from
            AMBomItem a,
            AMBommatl b
        where
            a.bomid = b.bomid
        
        while @@rowcount<>0
        begin
            set @i = @i + 1
            
            insert into #t  
            select 
                b.invtid,a.qtyreq*c.qtyreq/b.qtyreq,b.bomid,@i
            from
                #t        a,
                AMBomItem b,
                AMBommatl c
            where 
                a.invtid = b.invtid
                and
                b.bomid = c.bomid
            
            delete #t where level = @i-1 and exists(select 1 from AMBomItem where invtid = #t.invtid)
        end
        
        select invtid,qtyreq=sum(qtyreq),bomid from #t group by invtid,bomid
    end
    go
      

  3.   

    以下存储过程输出为:原料、原料需要量、bomid
    ---------------------------------------------------------
    create procedure sp_getqty(@invtid varchar(20)) --成品ID
    as
    begin
        declare @i int
        set @i = 1
        
        select 
            b.invtid,b.qtyreq,b.bomid,@i as level
        into #t
        from
            AMBomItem a,
            AMBommatl b
        where
            a.bomid = b.bomid
        
        while @@rowcount<>0
        begin
            set @i = @i + 1
            
            insert into #t  
            select 
                b.invtid,a.qtyreq*c.qtyreq/b.qtyreq,b.bomid,@i
            from
                #t        a,
                AMBomItem b,
                AMBommatl c
            where 
                a.invtid = b.invtid
                and
                b.bomid = c.bomid
            
            delete #t where level = @i-1 and exists(select 1 from AMBomItem where invtid = #t.invtid)
        end
        
        select invtid,qtyreq=sum(qtyreq),bomid from #t group by invtid,bomid
    end
    go