sql.Add('insert into '+edit1.text+'(item ,num) select "id2", sum(id2) from test where id2=1');
sql.Add('insert into '+edit1.text+'(item ,num) select "id3", sum(id3) from test where id3=1');
sql.Add('insert into '+edit1.text+'(item ,num) select "id4", sum(id4) from test where id4=1');
sql.Add('insert into '+edit1.text+'(item ,num) select "id4", sum(id4) from test where id4=1');以上语句是我想实现的结果:把test表中id1至id4列的列名和求和值通过select语句insert到一个表中,但我写的方法比较笨,而且列数多了就不行了。
应该是可以用for语句,通过变量i来实现的。但有个问题是如何用select语句,是否能不用列名,只用第i列来作查询,并且如何能把列名也查询得到,
以上的语句列名都是我自己写的,方法都比较笨。本人新手,请各位大侠指教,不胜感激!

解决方案 »

  1.   

    query.sql.clear;
    //选出test表的所有列名
    query.sql.add('select name from syscolumns where id in (select id from sysobjects where name =N''test'')');
    query.open;
    if Not Query.Eof then begin
      strSQL := 'insert into ' + edit1.text + '(item,num)';
      strFieldName := query.FieldByName('name').AsString;
      SQL := SQL + #13#10 ' select ''' + strFieldName + ''',sum(' + strFieldName + ') from test where ' + strFieldName + '=1';
      Query.Next;
      while Not Query.eof do begin
        SQL := SQL + #13#10 'union all select ''' + strFieldName + ''',sum(' + strFieldName + ') from test where ' + strFieldName + '=1';
        Query.Next;
      end;
      Query.SQL.Text := SQL
      ...
    end;
      

  2.   

    1楼的大哥,你获取的列名是在sqlserver数据库中实现的吧,在access中怎么实现啊
      

  3.   

      用一个dataset绑定表,然后用Dataset.Fields.count做循环。