数据表:table
(两个字段bbb和aaa,bbb字段Varvhar类型,aaa字段int类型,共三条数据,如下)
字段名  bbb aaa
         dd    1
         ff    2
         dd    3代码如下:
  sql="select sum(aaa) as sss from table";
  rs=stm.executeQuery(sql);错误:列'table.bbb'在选择列表中无效,因为该列未包含在聚合函数中,并且没有GROUP BY子句.
这段代码是在jsp中实现的,数据库是SQLserver,我将"select sum(aaa) as sss from table"直接在sqlserver企业管理器中执行,能够正常得到结果,不知为什么?哪位高手给个说明,在线等待!!!!!!!!
(数据表和代码都不复杂,可以自己重现一下.)

解决方案 »

  1.   

    不知道是不是因为你的表名字叫table的原因...
      

  2.   

    对不起,和表无关,本来表名是table1,我提出问题时改成table的,
      

  3.   

    不光是SUM函数,替它所有聚合函数都会遇到这个问题.
    按照错误提示,问题可能出在使用聚合函数的select语句必须要使用group by 子句,我试过了"select sum(aaa) as sss from table group by bbb"语句就可以顺利执行,但是如果我就是要得到所有aaa字段之和值,这个语句就没法写了(只是在jsp中执行出错,在sqlserver企业管理器中执行select sum(aaa) as sss from table没有问题)
      

  4.   

    对了你用的SQL Server驱动是什么包啊?
      

  5.   

    各位大侠,怎么看jdbc的版本呀,我的jdbc是微软的,版本在什么地方看呀(mssqlserver.jar的最后修改时间是2004-4-21)?
    wuyg(平平) 说得有道理,有可能是JDBC版本的问题,我接触Java时间很短,很多问题还不清楚,各位多多指点了?
      

  6.   

    我觉得jdbc下肯定会解决这个问题。
      

  7.   

    问题解决:
    升级了JDBC,现在使用的是SQL2005的JDBC驱动,以上问题不再出现。
    注意:SQK2005JDBC只有一个JAR包,同时包中的目录顺序与旧版本有区别,
    旧版本:
    Class.forName("com.microsoft.jdbc.sqlserver.SQLserverDriver");
    新版本:
    Class.forName("com.microsoft.sqlserver.jdbc.SQLserverDriver");
      

  8.   

    以上应该是旧版本JDBC的一个BUG吧。多谢各位给我的帮助。
      

  9.   

    哈哈,你用的SQL2005啊。我们是古董了。40分受之有愧。多谢LZ了。
    共同学习,共同进步。