动态拼出having后的条件就可以了!

解决方案 »

  1.   

    //假设你将这种区间设置存在一个表中TEMP(KS, JS)
      strSql := ''; //最后的Sql
      strKS := ''; //区间开始
      strJS := ''; //区间结束
      with query1 do
      begin
        Close;
        Sql.Clear;
        Sql.Add('select ks,js from temp');
        Open;
        while not eof do
        begin
          strKS := fieldbyname('ks').asstring;
          strJS := fieldbyname('js').asstring;
          strSql := strSql + ' select ''' + strKS + '-' + strJS + ''' area,count(*) from sj_tstj where zgl between ' + strKS + ' and ' + strJS + ' union';
        end;
        strSql := copy(strSql, 1, length(strSql) - 5); //截去最后一个'union'
        Close;
        Sql.Clear;
        Sql.Add(strSql);
        Open;
      end;