带有嵌套连接的'group by'的SQL到HQL

时间:2012-03-03 17:06:47

标签: sql sql-server tsql nhibernate hql

是否可以将此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

3 个答案:

答案 0 :(得分:1)

The documentation说:

  

请注意,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 variabletemporary tablecommon table expression

然后,您可以像常规桌一样加入这三个中的一个。

根据您的数据要求,一个可能比另一个更合适。通常人们建议仅将表变量用于非常小的数据集(少于100行),所以请记住这一点。