试试把表结构改一下,再用connect by 和start with.

解决方案 »

  1.   

    比如:
     加一个字段slave_id references tablename,
     select sum(value),level from tablename
     connect by prior id=slave_id start with id=1;
    没有具体试过,不知道好不好用...(这是Oracle的)
      

  2.   

    sorry, I only know oracle...
    sorry for that I can not help you! :.(
      

  3.   

    "'"是用来表示各个级别的
    一 的下级 1  2  3......
    1的下级 1'  2'  3'    
    1'的下级 1'' 2'' 3'' ....
    1''的下级 1''' 2''' 3'''
    等等
    输入:
    一                
    1    
    1'
    1''  2 
    2''  3
    3''  
    1''' 2
    2''' 3 
    3''' 4 
    2'  
    1''  1
    2''  3
    3'   3
    2    
    1'   3
    2'   4
    3    2输出:
    一          30(即下面三个子级别的sum,21+7+2)            
    1           21(14+4+3)
    1'          14(即下面三个子级别的sum,2+3+5)
    1''  2      2(未经过sum)
    2''  3      3(未经过sum)
    3''         9(即下面三个子级别的sum,2+3+4)
    1''' 2
    2''' 3 
    3''' 4 
    2'          4(即下面两个子级别的sum,1+3)
    1''  1
    2''  3
    3'   3      3(未经过sum)
    2           7(即下面两个子级别的sum,3+4)
    1'   3
    2'   4
    3    2      2(未经过sum)
    一个成本核算程序要这么做
    目的不但要统计整机成本,还要统计部件成本(即下面的各个子级别)
      

  4.   

    不太会.我想这个要是实现的话可能用一个模糊查询
    select id,sum(value) as 价格  from 表 where id  in( select id from 表 where id like 可输入的id号+'%')
    我很菜的,只能写这样了!
      

  5.   

    树状结构的东东,可能用链表可以解决
    或者选择编程这条路吧,用sql恐怕比较难
      

  6.   

    function CharCount(mStr: string; mChar: Char): Integer;
    var
      I: Integer;
    begin
      Result := 0;
      for I := 1 to Length(mStr) do
        if mStr[I] = mChar then
          Inc(Result);
    end; { CharCount }procedure TForm1.Button1Click(Sender: TObject);
    var
      SumList: array[-1..4] of Real;
      I, J: Integer;
    begin
      Table1.Last; //最后
      J := -1;
      FillChar(SumList, SizeOf(SumList), 0); //清零
      while not Table1.Bof do begin
        if Table1.FieldByName('id').AsString = '一' then
          I := -1
        else I := CharCount(Table1.FieldByName('id').AsString, '''');
        if J > I then begin
          Table1.Edit;
          Table1['Value'] := SumList[J];
          Table1.Post;
          if I = J - 1 then SumList[J] := 0;
        end;
        SumList[I] := SumList[I] + Table1.FieldByName('Value').AsFloat;
        J := I;
        Table1.Prior;
      end;
    end;
      

  7.   

    to zswang(伴水)
    测试通过! 
    不愧为高手!
    确实也解决了我的问题,呵呵
    伴水,你一个月拿多少钱,干脆到我的公司来吧,呵呵