Java Jpa本机查询不适用于带有绑定值的GROUPBY case/when语句
我正在尝试使用Jpa存储库使用本机查询从我的sql server获取数据 这是我的服务部门的一个简单电话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
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"