SQL в HQL для 'group by' с вложенным соединением - PullRequest
0 голосов
/ 03 марта 2012

Возможно ли преобразовать этот 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 ]

1 голос
/ 04 марта 2012

Основываясь на том, что написал @JBNizet, попробуйте этот подход вместо этого (не проверено)

select 
    emp.FirstName,
    (select sum(hours)
     from WorkTimeEntry w
     where w.Employee = emp)
from Employee emp

Некоторые замечания:

  • Вы должны сопоставить ссылку Employee, а неEmployeeId скаляр
  • Я не включил ваше условие группировки, потому что вы ничего не делаете с WorkTimeType.Вы уверены, что это то, что вы хотите?(вы можете добавить его заново)
1 голос
/ 03 марта 2012

Документация гласит:

Обратите внимание, что подзапросы HQL могут появляться только в выражениях select или where

Так что это невозможноперевести его прямо на HQL.(Примечание: я проверил Hibernate, но он должен быть таким же в NHibernate).

0 голосов
/ 03 марта 2012

Я ничего не знаю о HQL, но, похоже, вам лучше всего (если возможно) вставить эти данные во временную таблицу , во временную таблицу или общее табличное выражение .

Затем вы можете присоединиться к одному из этих трех, как к обычному столу.

В зависимости от ваших требований к данным один может быть более подходящим, чем другой. Обычно люди рекомендуют использовать только табличные переменные для очень маленьких наборов данных (менее 100 строк), поэтому имейте это в виду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...