This question already has answers here:
MySQL GROUP BY doesn't work when migrated to SQL Server 2012
                                
                                    (3个答案)
                                
                        
                                2年前关闭。
            
                    
请找到下面的查询。
我用spring数据jpa写了这个查询。因此,它应该可以在所有关系数据库上使用,但是我在MsSQL Server和MySQL上都遇到了异常。

@Query(value = "SELECT p.ct,p.ctc,p.fy,"
            + " sum(p.oA + p.nA) as a,p.py "
            + " FROM P p where p.py = :py AND p.fy = :fy "
            + " AND p.B.eId in (SELECT eId FROM B WHERE o.oId in ( :oIds ) ) group by p.ct")
    List<?> test(@Param("py")String py,@Param("fy") Integer fy,@Param("oIds")List<Integer> oIds);


这完全可以在MySQL服务器上使用,但不能在MsSQL服务器上使用。

当我在MsSQL中运行时,它给出了以下异常。

SqlExceptionHelper: Column 'tbl.ctc' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
[2017-10-27 09:38:38.108] boot - 83734 ERROR [http-bio-8080-exec-1] ---


任何帮助,应表示赞赏。

谢谢

最佳答案

这不是Spring Data JPA的问题。您正在使用不属于SQL标准的MySQL的特定功能:

10.6 General Rules for the GROUP BY Clause


  如果选择块确实具有GROUP BY子句,则SELECT子句中指定的任何列规范必须排他地作为聚合函数的参数或在GROUP BY子句中给出的列列表中出现,或在两者中都出现。


您的查询有

SELECT p.ct, p.ctc, p.fy, p.pt




group by p.ct"


通常这是无效的SQL。这就是为什么许多其他数据库(MySQL除外)将引发异常的原因。

将列添加到group by子句中,或改为使用列的聚合函数。

关于java - Spring Data JPA查询在MsSQL Server上不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46979527/

10-09 17:22