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) 中

解决方案 »

  1.   

    好像ACCESS不支持case when ,可以换成IIF
      

  2.   

    ACCESS不支持case when ,sqlserver支持
      

  3.   

    在ms sql中可以通过,但是Access中并不支持
      

  4.   

    不是好象,而是access不支持case语句。
      

  5.   

    最好把SQL语句取出来,
    在ACCESS环境下运行一下,问题就容易找出办法解决了。
      

  6.   


    能否將如下更新到一個臨時表中按要求更新>=60,<60的情況...
    再插入? ---
      

  7.   


    的确如此,放弃用case吧。可以在sheji中增加一个“是否合格”的字段,先用update语句更新。然后再用查询语句。
      

  8.   

    3#大师方法好,基本本上解决了问题:
    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.   

    1.可能总人数是0,所以相除时会报错;
      但是以单位分组统计总人数,结果不可能是0的,所以你最好打开表,看看里面的数据是长什么样子2.sum( iif ( 分数 >=60 , 1 ,0 ))/总人数 ,这个总人数你还没有求出来,改成这样试试:
      sum( iif ( 分数 >=60 , 1 ,0 ))/count(单位)