是否可以将此SQL转换为HQL?
我已经尝试过,但我对嵌套连接语法有困难。
select
emp.FirstName,
nestedEmp.Hours
from Employee emp
join
(select
e.Id,
w.WorkTimeType,
Hours = SUM(hours)
from Employee e
left join WorkTimeEntry w on e.Id = w.EmployeeId
group by e.Id, w.WorkTimeType) as nestedEmp
on emp.Id = nestedEmp.Id
答案 0 :(得分:1)
请注意,HQL子查询只能出现在select或where子句
中
因此,无法将其直接转换为HQL。 (注意:我检查了Hibernate,但它在NHibernate中必须是相同的。)
答案 1 :(得分:1)
在@JBNizet所写的基础上,尝试这种方法(未经测试)
select
emp.FirstName,
(select sum(hours)
from WorkTimeEntry w
where w.Employee = emp)
from Employee emp
有些注意事项:
Employee
引用,而不是EmployeeId
标量WorkTimeType
做任何事情。你确定这是你想要的吗? (你可以重新添加它)答案 2 :(得分:0)
我对HQL一无所知,但看起来最好的选择(如果可能的话)是将此数据插入table variable,temporary table或common table expression。
然后,您可以像常规桌一样加入这三个中的一个。
根据您的数据要求,一个可能比另一个更合适。通常人们建议仅将表变量用于非常小的数据集(少于100行),所以请记住这一点。