做法是:
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)第一次在 表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 接下来,第二、第三次的查询插入语句如何写,才能一列一列地插进来?请赐教,谢谢!
解决方案 »
- 关于timer时钟,设定每5分钟执行一次,原先好好的,现在为何不运行了?
- dbgrideh 格式化输入和数据转换难题
- 请教各位大侠,关于文件打开的问题
- 在'客户-服务器'中,怎样才能够实时监视到接收信息的情况
- 请大家为小弟推荐几本好书,拜托了...
- 怎样一次删除多个表
- 请教ehlib中的dbgrid如何在某个字段实现下拉?
- 用TMIDEDIAPLAYER做的程序为什么在其他机器上提示说什么MCI问题?好像是要改SYSTEM。INI的,但我不记得了,你还记得吗?
- 如何用最简单的方法得到文件修改日期和文件大小信息?
- StringGrid控件的标题问题
- 要从Oracle中取值插入到access中,sql语句怎么写?
- 请帮忙看一下这个DLL调用的函数,参数怎么写
select 班级
,count(班级) as 班级总人数
,AVG(分数) as 各班平均分
,sum(case when 分数>=60 then 1 else 0 end) as 各班及格人数
from 表1
group by 班级
order by 班级
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) 中
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 单位 ');
select 班级
,count(班级) as 班级总人数
,AVG(分数) as 各班平均分
,count(班级)as 各班及格人数
from 表1
group by 班级 having 分数>=60
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%,并不是各单位实际的及格人数与各单位总人数的比 奇怪??? 该如何改?