SELECT person.a0101, person.dept_id, AVG(person.true_cent * stardard.per) 
      AS average_cent
FROM stardard INNER JOIN
      person ON stardard.dept_id = person.dept_id AND 
      stardard.standard_name = person.standard_name
GROUP BY person.a0101, person.dept_id

解决方案 »

  1.   

    JOIN
          person ON stardard.dept_id = person.dept_id AND 
          stardard.standard_name = person.standard_name条件在这里设了
      

  2.   

    这个是我的代码:
    procedure TForm2.Button2Click(Sender: TObject);
    begin
     query4.Close;
     query4.SQL.Clear;
     query4.SQL.Add('SELECT person.a0101, person.dept_id, AVG(person.true_cent * standrd.per) AS average_cent FROM standrd INNER JOIN person ON standrd.dept_id = person.dept_id AND standrd.standard_name = person.standard_name GROUP BY person.a0101, person.dept_id');
     query4.Open;
     close;
    end;对于这样的保存数据我没有遇到过,望高手指点!
      

  3.   

    就是要保存,新建的表是average
      

  4.   

    表如下:
    字段:A0101  dept_id  average_cent
      

  5.   

    CREATE TABLE A2(a0101 char(10), dept_id int, aver_num int) INSERT INTO A2
                                                                      VALUES (99)
                                                                                SELECT person.a0101,
                                                                                     person.dept_id, 
                                                                                    AVG(person.true_cent
                                                                                     * stardard.per) 
                                                                                    AS average_cent
                                                                              FROM stardard INNER JOIN
                                                                                    person ON 
                                                                                    stardard.dept_id =
                                                                                     person.dept_id AND
                                                                                     stardard.standard_name
                                                                                     = person.standard_name
                                                                              GROUP BY person.a0101,
                                                                                     person.dept_id
      

  6.   

    那你要检测,如果不存在就用上面的,如果表存在的话就这样
    INSERT INTO A2
                                                                      VALUES (99)
                                                                                SELECT person.a0101,
                                                                                     person.dept_id, 
                                                                                    AVG(person.true_cent
                                                                                     * stardard.per) 
                                                                                    AS average_cent
                                                                              FROM stardard INNER JOIN
                                                                                    person ON 
                                                                                    stardard.dept_id =
                                                                                     person.dept_id AND
                                                                                     stardard.standard_name
                                                                                     = person.standard_name
                                                                              GROUP BY person.a0101,
                                                                                     person.dept_id
      

  7.   

    那完整的代码是这样吗?
    procedure TForm2.Button2Click(Sender: TObject);
    begin
     query4.Close;
     query4.SQL.Clear;
     query4.SQL.Add('insert into average VALUES (99)'SELECT person.a0101, person.dept_id, AVG(person.true_cent * standrd.per) AS average_cent FROM standrd INNER JOIN person ON standrd.dept_id = person.dept_id AND standrd.standard_name = person.standard_name GROUP BY person.a0101, person.dept_id');
     query4.Open;
     close;
    end;
      

  8.   

    对,但我的类型不一定对,
    一个是char的长度,一个是我用的是int,不知道你是是real还是int.
    你在调试一下吧。
      

  9.   

    从你上面的公式看,应该是:
    insert average(
    A0101,dept_id,average_cent)
    select person.A0101, person.dept_id, sum(person.True_cent * standrd.per) from stardard, person where stardard.dept_id = person.dept_id and stardard.standard_name = person.standard_name 
    group by person.A0101, person.dept_id有重复的原因应该是有的姓名有不同的dept_id。
      

  10.   

    A0101  dept_id  average_cent
    char    int       float
      

  11.   

    那完整的代码是这样吗?
    procedure TForm2.Button2Click(Sender: TObject);
    begin
     query4.Close;
     query4.SQL.Clear;
     query4.SQL.Add('insert into average VALUES (A0101,dept_id,average_cent) SELECT person.a0101, person.dept_id, sum(person.true_cent * standrd.per) AS average_cent FROM standrd INNER JOIN person ON standrd.dept_id = person.dept_id AND standrd.standard_name = person.standard_name GROUP BY person.a0101, person.dept_id');
     query4.Open;
     close;
    end;
    你的公式要说清楚!!
      

  12.   

    类型不是问题,per字段本身是有小数的!
      

  13.   

    procedure TForm2.Button2Click(Sender: TObject);
    begin
     query4.Close;
     query4.SQL.Clear;
     query4.SQL.Add('insert into average (A0101,dept_id,average_cent) SELECT person.a0101, person.dept_id, sum(person.true_cent * standrd.per) AS average_cent FROM standrd INNER JOIN person ON standrd.dept_id = person.dept_id AND standrd.standard_name = person.standard_name GROUP BY person.a0101, person.dept_id');
     query4.Open;
     close;
    end;
      

  14.   

    每个员工的平均分(average_cent)=true_cent1*per1+true_cent2*per2…………
    然后将对应的人名和部门编号存入表average
    编译的时候出错:string literals may have at most 255 elements
      

  15.   

    query的SQL不能超过255个字符,
    现在只有分开作了,
    第一步:CREATE TABLE aver_table(a0101 char(10), dept_id int, aver_num float) 
    第二步:INSERT INTO aver_table VALUES (99) SELECT person.a0101, person.dept_id, AVG(person.true_cent * stardard.per) 
          AS average_cent
    FROM stardard INNER JOIN
          person ON stardard.dept_id = person.dept_id AND 
          stardard.standard_name = person.standard_name
    GROUP BY person.a0101, person.dept_id
      

  16.   

    呵呵,超过255个字符是DELPHI的问题,我不会DELPHI!!DELPHI怎么有255个字符的限制,不好!建议用存储过程,但我不知道DELPHI怎么调用。
    (好象还不知道你用的数据库)
      

  17.   

    公式是这样的话应该用sum,而不是avg
      

  18.   

    我在SQLServer2000中已经新建好了表average
    这个是我修改的代码:
    procedure TForm2.Button2Click(Sender: TObject);
    begin
     query4.Close;
     query4.SQL.Clear;
     query4.SQL.Add('insert to average values (99) SELECT person.a0101, person.dept_id, AVG(person.true_cent * standrd.per) AS average_cent FROM standrd INNER JOIN person ON standrd.dept_id = person.dept_id AND standrd.standard_name = person.standard_name GROUP BY person.a0101, person.dept_id');
     query4.Open;
     close;
    end;还是老错误!
      

  19.   

    你用的是SQL server就不怕了,
    在sql里写存储过程
    在delphi中用TStoredProc调用就可以了。
      

  20.   

    帮你减一些字符,不过你好象从来没看我的回复!?
    procedure TForm2.Button2Click(Sender: TObject);
    begin
     query4.Close;
     query4.SQL.Clear;
     query4.SQL.Add('insert into average(A0101,dept_id,average_cent) SELECT a.a0101, a.dept_id, sum(a.true_cent*b.per) AS average_cent FROM standrd b,person a where b.dept_id = a.dept_id AND b.standard_name = a.standard_name GROUP BY a.a0101, a.dept_id');
     query4.Open;
     close;
    end;在255以下了!!
      

  21.   

    procedure TForm2.Button2Click(Sender: TObject);
    begin
     query4.Close;
     query4.SQL.Clear;
     query4.SQL.Add('insert into average(A0101,dept_id,average_cent SELECT a.a0101, a.dept_id, AVG(a.true_cent * b.per) AS average_cent FROM standrd b,person a where b.dept_id = a.dept_id AND b.standard_name = a.standard_name GROUP BY a.a0101, a.dept_id');
     query4.Open;
     close;
    end;
    修改成这样,说select附近有错,不知道在哪里?
      

  22.   

    原来是select少了个括号,现在修改如下,还是有错,那位帮看看
    procedure TForm2.Button2Click(Sender: TObject);
    begin
     query4.Close;
     query4.SQL.Clear;
     query4.SQL.Add('insert into average(A0101,dept_id,average_cent) SELECT a.a0101, a.dept_id, AVG(a.true_cent * b.per) AS average_cent FROM standrd b,person a where b.dept_id = a.dept_id AND b.standard_name = a.standard_name GROUP BY a.a0101, a.dept_id');
     query4.Open;
     close;
    end;
      

  23.   

    copy过去不就行了吗?
    看了怎么还是AVG
      

  24.   

    Yang_(扬帆破浪)
    回答他的问题好累呀shilydream(波波) 你要好好谢谢两位高手
    看来你是刚做数据库的吧
      

  25.   

    真的是这样的,干些高手们的细心指导,我不知道怎么入门学习的。
    但是我用AVG可以啊,他们的区别在哪里?
      

  26.   

    AVG语法是没有问题,但你必须结果对呀!!
      

  27.   

    各位高手,我的程序需要AVG,
    结果可以出来了,也可以保存,但是DBTables有错误,就是这一行:
       raise ENoResultSet.Create(SHandleError);
    是怎么回事?