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) 中
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) 中
解决方案 »
- 谁推荐本delphi方面的书啊,最好有案例的
- ****已知Memo中的确定行,在Edit1中显示这一行中的确定列的字符值****
- TShellTreeView释放异常的问题(怕问题太难,浪费分数,登记20,允诺200)
- 我想判断combobox为空是,清除edit1.TEXT,可是不行
- 关于服务的奇怪问题,请大家看看!!
- 数据表中主键为Null时的错误如何捕捉
- 动态添加的控件如何写事件?
- 请问如何在delphi里调用sql server里定义好的函数?
- 怎样打包?
- 开源代码RooyeeMessenger,编译RMComponent无法输出,是怎么回事情?
- idhttp get 屏蔽 404 错误
- 如何在写Delphi语句对adotable中的tablename修改成其他的表?
在ACCESS环境下运行一下,问题就容易找出办法解决了。
能否將如下更新到一個臨時表中按要求更新>=60,<60的情況...
再插入? ---
的确如此,放弃用case吧。可以在sheji中增加一个“是否合格”的字段,先用update语句更新。然后再用查询语句。
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%,并不是各单位实际的及格人数与各单位总人数的比 奇怪??? 该如何改?
但是以单位分组统计总人数,结果不可能是0的,所以你最好打开表,看看里面的数据是长什么样子2.sum( iif ( 分数 >=60 , 1 ,0 ))/总人数 ,这个总人数你还没有求出来,改成这样试试:
sum( iif ( 分数 >=60 , 1 ,0 ))/count(单位)