做法是:
1)第一次在 表1 中查到“各班的总人数”,然后插入 表2 中,接着
2)第二次又在  表1  中查到“各班的平均分”,然后插入 表2 中,再接着
3)第三次再在  表1  中查到“各班的及格人数”,然后插入 表2 中。
(注:表2 已有标题:班级  班级总人数    各班平均分  各班及格人数 )表1:
  
班级 姓名   分数
一(1) 张一    60
一(2) 张二    70
一(3) 张三    85
一(1) 李四    50
一(2) 王五    65第一次查询插入语句可以这样写:insert into 表2 (班级,班级总人数)select班级,count(班级)as班级总人数from 表1  group by 班级
插入后,结果如下:
表2:班级 班级总人数 各班平均分 各班及格人数
一(1) 2    
一(2) 2    
一(3) 1     接下来,第二、第三次的查询插入语句如何写,才能一列一列地插进来?请赐教,谢谢!

解决方案 »

  1.   

    将count(班级) 变为相应的聚合函数就可以了,奇怪,为什么不一次插入
      

  2.   

    求及格人数,having 分数>=60  
      

  3.   

    insert 表2 (班级,班级总人数,各班平均分,各班及格人数)
    select 班级
      ,count(班级) as 班级总人数
      ,AVG(分数) as 各班平均分
      ,sum(case when 分数>=60 then 1 else 0 end) as 各班及格人数
    from 表1
    group by  班级
    order by 班级
      

  4.   

    3楼,我用了你的方法:procedure TForm1.Button2Click(Sender: TObject);
    begin
    adoquery1.Close;
    adoquery1.SQL.Clear;
    adoquery1.sql.Add('delete from tongji ');
    adoquery1.ExecSql;
    adoquery1.Close;
    adoquery1.SQL.Clear;
    adoquery1.sql.Add('insert into tongji (单位,总人数 ,平均分,及格人数) select 单位 , count(单位) as 总人数 , avg(分数)as 平均分 ,sum( case when 分数 >=60 then 1 else 0 end) as 及格人数 from sheji group by 单位 ');adoquery1.ExecSql;
      adoquery1.Close;
      adoquery1.SQL.Clear;
      adoquery1.SQL.Add('select * from tongji');
      adoquery1.Open;为什么运行后 提示语法错误,在表达式: sum( case when 分数 >=60 then 1 else 0 end) 中
      

  5.   

    如果case语法不对,可能是你的数据库不是sql server,换子查询试试
    adoquery1.sql.Add('insert into tongji (单位,总人数 ,平均分,及格人数) select 单位 , count(单位) as 总人数 , avg(分数)as 平均分 ,(select count(1) from sheji where 分数 >=60 and 单位=t.单位) as 及格人数 from sheji t group by 单位 ');
      

  6.   

    sum(iif(分数 >=60,1,0)) 
      

  7.   

    insert  into 表2 (班级,班级总人数,各班平均分,各班及格人数)
    select 班级
      ,count(班级) as 班级总人数
      ,AVG(分数) as 各班平均分
      ,count(班级)as 各班及格人数
    from 表1
    group by 班级 having 分数>=60  
      

  8.   

    7#  和 9# 大师 方法好,基本上解决了问题:
    adoquery1.Close;
    adoquery1.SQL.Clear;
    adoquery1.sql.Add('delete from tongji ');
    adoquery1.ExecSql;
    adoquery1.Close;
    adoquery1.SQL.Clear;
    adoquery1.sql.Add('insert into tongji (单位,总人数 ,平均分,及格人数) select 单位 , count(单位) as 总人数 , avg(分数)as 平均分 ,sum( iif ( 分数 >=60 , 1 ,0 )) as 及格人数 from sheji group by 单位 ');
      adoquery1.ExecSql;
      adoquery1.Close;
      adoquery1.SQL.Clear;
      adoquery1.SQL.Add('select * from tongji');
      adoquery1.Open;可是,当我想改变一下,又出现了新问题: 问题一:将上面 adoquery1.SQL.Add('select * from tongji');
    改为:adoquery1.SQL.Add('select 单位,平均分,及格人数 / 总人数 as 及格率 from tongji');时,又报错了.为什么不可以这样改?问题二:还有,如果把adoquery1.sql.Add('insert into tongji (单位,总人数 ,平均分,及格人数) select 单位 , count(单位) as 总人数 , avg(分数)as 平均分 ,sum( iif ( 分数 >=60 , 1 ,0 )) as 及格人数 from sheji group by 单位 ');改变为:
    adoquery1.sql.Add('insert into tongji (单位,总人数 ,平均分,及格率 ) select 单位 , count(单位) as 总人数 , avg(分数)as 平均分 ,sum( iif ( 分数 >=60 , 1 ,0 ))/总人数 as 及格率 from sheji group by 单位 ');所算出的及格率都是100%,并不是各单位实际的及格人数与各单位总人数的比 奇怪??? 该如何改?
      

  9.   

    这么熟悉的帖子??http://topic.csdn.net/u/20100711/22/780aefc7-0092-4d3e-bd12-47b315ae6991.html