我想你是要按照不同的Bl_no求和吧,应该在后面再加上
SqlStr := SqlStr+" group by bl_no"

解决方案 »

  1.   

    一定是这个因为这个字段是关键字.所以在做统计的时候它无法被合计起来(每条记录都不同).必需作为一个GROUP的对象.
      

  2.   

    TO  dajianshi
    多谢老兄
    我的不是分组问题,每条记录只有一个gp20'、hq20、...
    试了你的方法还是老样子
    TKS!
      

  3.   

    少  grotp by bl_no
      

  4.   

    TO cnnjvirus(病毒情书) 
    多谢
    我的不是分组问题,整个表中没有重复的bl_no字段,但这个字段不是关键字
    TKS!
      

  5.   

    请大家注意
    我的不是分组问题,
    整个表中没有重复的bl_no字段,
    但这个字段不是关键字之所以要用到该字段,是要用户输入bl_no后
    可以查询该bl_no对应的值,虽然只有一条,
    如果用日期段查询,则有很多个bl_no,及统计值
    不需要分组
      

  6.   

    1.查一下字段名称是否错误,比如,半角字符和字符之分
    2.其它好象没有错,不用加group,如果真如你所说,b_no唯一
      

  7.   

    to  lybdata(天下) 
    字段拼写没错
    我还发现一个奇怪现象
    不能加任何非统计字段bl_no或bl_date...之类的
    只能加统计字段
    sum(gp20),sum(hq20),sum(ot20),sum(el20), sum(gp40),sum(hq40),sum(ot40),sum(el40)
    这才奇怪呀
      

  8.   

    统计表达式不能与非统计表达式出现在一起,除非非统计表达式出现在Group by中。这是Sql语法所决定的,无论非统计表示式是否是关键字。你这个情况可以用这样的SQL语句表示:
    select a.bl_no,b.* from incont a,
    (select sum(gp20),.... from incont) b;或者
    select bl_no, (select sum(gp20) from incont) sum_gp20,.....
    from incont取决于你的数据是否支持第一种写法。
      

  9.   

    to  keyz(keyz) 
    老兄:按照你的方法我已成功修改的原程序,但随之而来的问题是,查询条件不起作用,datetimepicker1.DateTime 及datetimepicker2.DateTime均有值, 错误提示:tempQ未发现参数'date1' 原代码如下,请指教!!!
        with frmdatamod.TempQ do
          begin
            Close;
            SQL.Clear;
            SqlStr:=' select a.bl_no,a.bill_date,a.oper_dock,';
            SqlStr:=SQLStr+' b.* from incont a, (select sum(gp20),';
            SqlStr:=SQLStr+'sum(hq20),sum(ot20),sum(el20), ';
            SqlStr:=SQLStr+'  sum(gp40),sum(hq40),sum(ot40),sum(el40) ';
            SqlStr:=SQLStr+' from incont ) b  ';
            SqlStr:=SQLStr+' where a.bill_date between :date1 and :date2';
            Parameters.ParamByName('date1').Value:=datetimepicker1.DateTime ;
            Parameters.ParamByName('date2').Value:=datetimepicker2.DateTime ;
            SQL.Add(sqlstr);
            Open;
          end;
      

  10.   

    楼上的错了,你把where 条件语句加错位制了
     SqlStr:=SQLStr+'  sum(gp40),sum(hq40),sum(ot40),sum(el40) ';
     SqlStr:=SQLStr+' from incont where a.bill_date between :date1 and :date2) b  ';
    你再试试看
      

  11.   

    to  zhhahuatian(华仔)
    按照你的方法试了,还是不行
    TKS!
      

  12.   

    单独的字段不能和求和字段一起查询
    实在不行的话,用两个query分别查出
    这样可否实现你的功能?
      

  13.   

    对zhhahuatian(华仔) 的做了个小小的修改:
     SqlStr:=SQLStr+'  sum(gp40),sum(hq40),sum(ot40),sum(el40) ';
     SqlStr:=SQLStr+' from incont where bill_date between :date1 
                                      ~~~~
                                      把a.去掉      
    and :date2) b  ';
      

  14.   

    loveness(天若有情天亦老) :
    我觉的你的的想法有些问题,
    如果按时间段查询,则统计值只有一条记录,而bl_no有多个值,它们不能放在一个SELECT 里,除非让统计值重复,可是你在界面上又怎么显示呢?
      

  15.   

    老兄,你想做什么那?
    select bl_no,sum(gp20),sum(hq20),sum(ot20),sum(el20), 
           sum(gp40),sum(hq40),sum(ot40),sum(el40)
      from incont
    这样的sql 一定要group by bl_no
    你的bl_no是个值吗?
    作为param 不就行了,象这样
    select :bl_no,sum(gp20),sum(hq20),sum(ot20),sum(el20), 
           sum(gp40),sum(hq40),sum(ot40),sum(el40)
      from incont
      group by :bl_no
    然后传paramByName('bl_no').as... := ???
    或者再套上一层,象这样
    select bl_no a.*
    from
    (
    select        sum(gp20) sum_gp20,
                  sum(hq20) sum_hq20,
                  sum(ot20) sum_ot20,
                  sum(el20) sum_el20,
                  sum(gp40) sum_gp40,
                  sum(hq40) sum_hq40,
                  sum(ot40) sum_ot40,
                  sum(el40) sum_el40
      from incont
    ) a
      

  16.   

    看不懂你想干什么。
    但是如果使用了sum等函数,则Select后列的字段不在sum等函数中,就必须在group by 子句中,这是Sql语法规定的,且在我看来也很合理,只是我不清楚你要用这个sql语句表达什么,所以不知道该怎么写,但是你给的句子在语法上就是错的。
      

  17.   

    对于Delphi的SQL调用我不是很清楚,我只对SQL比较熟。因为数据库中的日期存储方式各不相同,而Delphi中的日期其实是一个浮点数,所以我不知道你这样赋值会出现什么问题。如果你可以使用其他条件查询(非日期型的),说明是日期表示的问题。具体的方法可能需要查数据库的日期方式,你可以试试使用字符串,比如'2002-1-1'。
      

  18.   

    如果使用了sum等函数,则Select后列的字段不在sum等函数中,就必须在group by 子句中,这是Sql语法规定的.如果值为唯一的话,为什么不能用group by 呢?
      

  19.   

    是一个聚合函数的问题写一个group by 子句就OK了
      

  20.   

    我觉得你应该是统计bl_no相同的数据项吧,bl_no 应该不是唯一
    试一下:select sum(**),sum(***)...where bl_no=(select bl_no from incont) group by bl_no
    很奇怪!
      

  21.   

    这条语句在SQL语法上是有问题的,很明显,SUM等函数的结果只会有一条记录,但偏偏又多了bl_no,尽管该字段在该数据库中并无重复记录,建议可能的话换另一种方式
      

  22.   

    这条语句在SQL语法上是有问题的,很明显,SUM等函数的结果只会有一条记录,但偏偏又多了bl_no(它的查询结果并不确定),尽管该字段在该数据库中并无重复记录,建议可能的话换另一种方式
      

  23.   

    以下经过SQL测试!可以成功!
    select incort.bl_no,b.sgp20 from incort join (select sum(gp20) as sgp20,bl_no from incort group by bl_no) as b on b.bl_no=incort.bl_no总之
    select 旧表.唯一值,新表.合计值字段 from 旧表 join (select 合计(xxx) as 合计值字段,唯一值 from 旧表 group by 键值) as 新表 on 新表.键值=旧表.键值
      

  24.   

    to zzzworm(磕睡虫)
      &^&^&)(*&(*^$%$##$@$#^()&_)*(_)((*^&^#$
      $%#$&%^*(^(_*_(_)(*&^&^$^#(*&_)(_+)((&(^&$$#   晕!
       倒!!
       好复杂哟!!!
       请问老兄在哪儿看到的
       厉害,值得研究