row_number()在hql中的分区
发布时间:2020-11-17 13:19:47 所属栏目:Windows 来源:互联网
导读:在hql中,row_number()相当于分区的含义 我在hql中有以下查询: select s.Companyname, p.Productname, sum(od.Unitprice * od.Quantity - od.Discount) as SalesAmount FROM OrderDetails as od inner join od.Orders as o inner join o
在hql中,row_number()相当于分区的含义
select s.Companyname,p.Productname,sum(od.Unitprice * od.Quantity - od.Discount) as SalesAmount FROM OrderDetails as od inner join od.Orders as o inner join od.Products as p " + "inner join p.Suppliers as s" + " where o.Orderdate between '2010/01/01' and '2014/01/01' GROUP BY s.Companyname,p.Productname" 我想通过s.Companyname进行分区,其中RowNumber< = n. 据我所知,你不能在 HQL和 JPQL中使用row_number().我建议在这种情况下使用 native SQL查询:@PersistenceContext protected EntityManager entityManager; ... String sQuery = "SELECT q.* FROM (" + "SELECT s.company_name," + "p.product_name," + "sum(od.unit_price * od.quantity - od.discount) as SalesAmount," + "row_number() OVER (partition by s.company_name) as rn " + "FROM OrderDetails od " + "INNER JOIN Orders o ON o.id = od.order_id " + "INNER JOIN Products p ON p.id = od.product_id " + "INNER JOIN Suppliers s ON s.id = p.supplier_id " + "WHERE o.order_date between '2010/01/01' and '2014/01/01') as q " + "WHERE rn <= :n"; List<ResultDbo> results = new ArrayList<>(); Query query = entityManager.createNativeQuery(sQuery); query.setParameter("n",n); List<Object[]> resultSet = query.getResultList(); for (Object[] resultItem : resultSet) { ResultDbo result = new ResultDbo(); result.setCompanyName((String) resultItem[0]); result.setProductName((String) resultItem[1]); result.setSalesAmount((String) resultItem[2]); results.add(result); } 如果您尝试在HQL中使用OVER(),您几乎肯定会得到一些验证异常,例如java.lang.IllegalArgumentException:org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌:在第1行第42列附近. .. (编辑:十堰站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- WIN10家庭中文版远程提示要求的函数不支持 win10家庭版提示
- _asm int 3 软件中断
- windows-phone-8.1 – 升级到最新Windows Phone 8.1后无法发
- Windows Python:为什么第一个打开的窗口未显示为活动状态?
- windows修改PowerShell(命令提示符)默认中文编码方式
- 02、Windows Server 2003域账户管理(02)
- 在非Qt应用程序中使用基于Qt的DLL
- windows-8 – 如何向可以定位多个平台的商店提交应用程序?
- 值为NULL的列是否会影响Microsoft SQL Server的性能?
- 如何在Windows 8.1上安装PyBluez?
推荐文章
站长推荐
- windows – CFileDialog :: OnInitDialog()不调用
- 为什么WPF在不同版本的Windows上呈现不同?
- ssms – 使用Windows身份验证时,如何在SQL Serve
- 部署 – Windows 8 Simulator命令行界面
- tfs – 在测试用例通过或失败时发送电子邮件警报
- winapi – Windows SDK 7.0的signtool中的signwi
- 获取与Windows Vista上的C#.Net连接的无线网络的
- Windows Server 2016 新功能HCI(超融合基础架构)
- 如何正确使用MSBuild社区任务库在.NET dll上设置
- Windows C线程参数传递
热点阅读