结构如下;A  B(数值)   parent
01   5    
02   3         01
03   4         02求03的值=(03的B)*(03的上一级的B)*(03的上上一级的B)就是如是 03有N个上级,就要把它的N个上级的值相乘再乘03的值要求要在SQL中完成....

解决方案 »

  1.   

    单单sql可能很难搞定吧,可以用存储过程:
    declare 
      n_sum number(10);
      cursor cc is 
      select a,b,pa from test
    connect by a  =  prior pa
    start with a='03';begin 
      n_sum:=1;
      for v in cc loop
        n_sum:=n_sum*v.b;
      end loop;
      dbms_output.put_line(n_sum);end;
      

  2.   

    declare @value int, @parent varchar(20), @final int
    select @value=B, @parent=parent from 表 where A='03'
    set @final=@value
    while (@parent is NOT NULL AND @parent NOT LIKE '')
    begin
    select @value=B, @parent=parent from 表 where A=@parent -- 选出parent
    @final = @final*@value -- 乘起来
    endprint @final --最后的结果
      

  3.   

    以上的都不行。
    我要的是BOM的用量的计算,一定要用递归才能做到啊...
      

  4.   

    不清楚你具体的表格内数据格式,所以只能写了一些示例。你的要求用单条的SQL很难完成的,写一个存储过程来调用会比较合适。其实这个和递归的道理是一样的。你需要根据你的程序进行修改。今天比较忙代码没有测试过,不好意思。思路:循环读取数据,当parent为空的时候停止,并将数据输出。
    1、根据所给的列A数据读出当前的列B和parent,将@total=B;
    2、循环,停止条件为parent为空,接下来是循环体;
    3、循环体内,根据where A=@parent,拿到parent的B,将B累乘到@total中;拿到parent的parent,供下一次循环判断;
    4、循环结束后,输出total