Java Jpa本机查询不适用于带有绑定值的GROUPBY case/when语句

Java Jpa本机查询不适用于带有绑定值的GROUPBY case/when语句,java,sql,sql-server,hibernate,spring-data-jpa,Java,Sql,Sql Server,Hibernate,Spring Data Jpa,我正在尝试使用Jpa存储库使用本机查询从我的sql server获取数据 这是我的服务部门的一个简单电话 repo.testData("h3","h3"); 这是我的存储库查询。 Select语句可以读取绑定变量:level,但group by无法读取该变量 @Query(value="SELECT sum(pos.total_weekly_sales) as curr_yr_sales, sum(pos.total_weekly_qty) a

我正在尝试使用Jpa存储库使用本机查询从我的sql server获取数据

这是我的服务部门的一个简单电话

repo.testData("h3","h3");
这是我的存储库查询。 Select语句可以读取绑定变量:level,但group by无法读取该变量

@Query(value="SELECT sum(pos.total_weekly_sales) as curr_yr_sales, sum(pos.total_weekly_qty) as curr_yr_qty, pos.vendor_nbr,pos.gmm_id,\n" +
            "case \n" +
            "when :level = 'h3' then pos.category_id\n" +
            "else 0\n" +
            "end category_id\n" +
            "from dbo.agg_sams_data pos\n" +
            "join dbo.calendar_dim cal on pos.wm_year_wk_nbr = cal.wm_year_wk_nbr\n" +
            "WHERE \n" +
            "cal.calendar_date BETWEEN '2019-09-11' and '2020-09-09'\n" +
            "and pos.vendor_nbr = 68494\n" +
            "and pos.gmm_id = 45\n" +
            "and (:h3Flag = 'N' or pos.category_id = 52)\n" +
            "GROUP by pos.vendor_nbr,pos.gmm_id,\n" +
            "case \n" +
            "when :level='h3' then pos.category_id\n" +
            "else 0\n" +
            "end",nativeQuery = true)
    List<List<Double>> testData(String level,String h3Flag);

您应该尝试将
pos.category\u id
放入组by,而不是整个case when语句。问题是,SQL Server无法确保两种情况下的参数具有相同的值,因此表达式可能不同。

我猜,这与您的查询有关嘿,我编写case/when语句的原因是动态使用此查询,即使它们是否提供了
pos.category\u id
。。。所以试着把两个单独的查询变成一个,以此类推
"GROUP by pos.vendor_nbr,pos.gmm_id,\n" +
            "case \n" +
            "when 'h3'='h3' then pos.category_id\n"