在 delphi 的 adoquery 中使用 sql case 语句

use sql case statement in a adoquery of delphi

所以我想在 delphi 中使用 adoquery 和 case 语句计算一个字段的总和; 我使用的代码是这样的:

DataModule2.ADOQuery1_630.sql.clear;
     DataModule2.ADOQuery1_630.sql.Add('select STATUT,case  when month(DATE_PAI)=1 then sum(MT) else 0 end  AS m');
     DataModule2.ADOQuery1_630.sql.Add('from table');
     DataModule2.ADOQuery1_630.sql.Add('where  STATUT in( :dd ,:df) and TYPE_QUIT = :l ');
     DataModule2.ADOQuery1_630.sql.Add('group by STATUT');
     DataModule2.ADOQuery1_630.Parameters.ParamByName('dd').Value:=pm;
     DataModule2.ADOQuery1_630.Parameters.ParamByName('df').Value:=pp;
     DataModule2.ADOQuery1_630.Parameters.ParamByName('l').Value:=typeQ;
     DataModule2.ADOQuery1_630.prepared := true;
     DataModule2.ADOQuery1_630.open;

但我收到一条错误消息:

syntax error operator absent in the expression case when month(DATE_PAI)=1 then sum(MT) else 0 end

谁能帮帮我

尝试做:

(组SELECTFROM在同一个DataModule2.ADOQuery1_630.sql.Add())

DataModule2.ADOQuery1_630.sql.clear;
DataModule2.ADOQuery1_630.sql.Add('SELECT STATUT, SUM(case when month(DATE_PAI)=1 then MT ELSE 0 END) AS m FROM table');
DataModule2.ADOQuery1_630.sql.Add('WHERE STATUT in(:dd,:df) and TYPE_QUIT=:l');
DataModule2.ADOQuery1_630.sql.Add('GROUP BY STATUT');
//...