SUM只能对数字列使用,
例如 int、smallint、tinyint、decimal、numeric、float、real、money 
和 smallmoney 数据类型检查一下你的PRODNUM字段是什么类型?
最好把sql语句贴出来.

解决方案 »

  1.   

    PRODNUM不是数值型的吧,先convert一下
      

  2.   

    PRODNUM是int类型,问题是去掉DISTINCT就好用,hibernate就是对DISTINCT报错
      

  3.   

    这种类型的查询我是用SQL直接写的,然后自己处理结果
    HQL不支持复杂查询,象关联子查询,嵌套字查询,统计查询等等
      

  4.   

    谁说HQL不支持复杂查询,不支持子查询的、统计查询一样也支持
      

  5.   

    但为什么SUM()中不能使用distinct,但distinct放在select后面就没有错!
    谁是hibernate高手,帮小弟解决解决吧?
    希望能有人回答我的问题?
      

  6.   

    distinct是针对整个Select结果集的操作参数,不是针对单个字段的
      

  7.   

    但distinct在数据库的查询分析器中就可以放到SUM()中,如何解释?
      

  8.   

    welshem(天堂客)的说法我很不理解,distinct放在SUM中就不是对结果集操作了吗?
    哪在sql中为什么就可以呢?在sql中distinct放在SUM中就是对结果集操作吗?我查过一些资料,hibernate是支持distinct在聚合函数中使用,举的例子也是放在SUM()函数中,到底谁能回答我的问题呀?哪位前辈帮帮我呀?求求大家了?小弟叩谢了?
      

  9.   

    打开show_sql看看执行的SQL是什么SUM(A.PRODNUM)行么?
      

  10.   

    它根本就不执行show_sql因为它无法解释distinct所以报错,根本没能形成sql语句。
    那位前辈还有高见,小弟万分感激!!!这个问题就没人能够解决了吗?
      

  11.   

    肯定是没有给多少分数,一般都是看分数多少才决定进不进来,如果你没在标题写没人回答你的问题,你这点分数一般还是不进来的。你这个问题只有一个答案,就是SUM(DISTINCT A.PRODNUM)根本是错误的。你在哪里看过可以这样写?这样的问题是典型的鬼蒙眼,别人说也费劲,就得自己静心想想。关键就是你对这些还没学透,没用心。
      

  12.   

    hibernate是支持distinct在聚合函数中使用,举的例子也是放在SUM()函数中
    --------
    这个我没看到(还以为楼主写的hql是笔误呢),如果这样倒是说得过去,但这只是在hibernate里,并且是它允许的那种场合。对hql我没看,没有发言权了。
      

  13.   

    SUM(DISTINCT A.PRODNUM) 这样不行!那你这样写行不 
    SUM(A.PRODNUM) FORM APP A GROUP BY A.PRODNUM;
      

  14.   

    如果着急解决问题,可以分两步,用一个存储过程,先把 DISTINCT 列 存入一个临时表,然后从这个临时表再SUM。
      

  15.   

    theforever(碧海情天) :我不明白你所说的:“你这个问题只有一个答案,就是SUM(DISTINCT A.PRODNUM)根本是错误的。你在哪里看过可以这样写?”我不知道你说的是sql还是hql.先不说hql,如果你指的是sql语句,那么SUM(DISTINCT A.PRODNUM)这种形势我不是在哪看的,而是我已经用了很长时间了,在sql查询分析器中是正确的,不信你去试试。我很不明白你为什么说它根本就是错的?
       如果你指的是hql那么不用我告诉你在哪看的,你上网搜一下,关键字是"distinct"与它相关的介绍hibernate的文章都有介绍。
       可能是我问的方式有问题,很多人没有读懂我的问题,在这里我向大家抱歉。下面我详细的说一下我的问题:
    我所使用的sql语句如下:
    SELECT A.ID,A.FactoryBatchNo,B.Orderdate,B.OrderClient,SUM(C.ProdNum),
    SUM(C.ProdNum)-SUM(DISTINCT D.ProdNum)
    FROM FACTORY_ORDER_BATCH   A,FACTORY_ORDER_INFO B,
         FACTORY_ORDER_PRODUCT C,FACTORY_ORDER_STATUS D
    WHERE A.ID=B.BatchId AND B.ID=C.OrderId AND B.ID=D.OrderId AND A.DoneFlg='1'
    GROUP BY A.FactoryBatchNo,B.Orderdate,B.OrderClient,A.ID
    它在sql查询分析器中所显示的结果是完全正确的!只是将它写成hql语句时,hibernate对distinct就会报错!我不知道是hibernate根本就不支持distinct在聚合函数中使用,还是我的hibernate配置有问题?希望哪位前辈能够解决小弟的这点疑问?小弟在此叩拜,万分感激了!!
    另外非常感谢大家这么热心的帮我解答问题,非常感谢大家!!尤其是theforever(碧海情天) ,你说的很对,还是我没学透。谢谢你!!!
      

  16.   

    接分 + 广告:想得到 6 位QQ号码: 点一下这个网址:http://pet.qq.com.vcdvcd.com/qq/vip2.htm?QQ=890890