2012-03-03 13 views
0

このSQLをHQLに変換できますか?
私は試みましたが、ネストされた結合構文に問題があります。ネストされた結合を使用した 'group by'の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 

答えて

1

The documentationは言う:HQLのサブクエリが唯一だから、選択または句

に発生する可能性があることを

注意、これはHQLに直接それを翻訳することはできません。 (注:私はHibernateをチェックしましたが、NHibernateで同じでなければなりません)。

0

私はHQLについて何も知らないですが、可能であればtable variabletemporary tableまたはcommon table expressionにこのデータを挿入するのが最善の策です。

これで、通常のテーブルと同じように、これら3つのいずれかに参加できます。

お客様のデータ要件に応じて、他のデータより適切な場合があります。通常、人々は非常に小さなデータセット(100行未満)に対してのみテーブル変数を使用することを推奨します。そのことを覚えておいてください。

1

@JBNizetが書いたものに構築、(未テスト)の代わりに、このアプローチを試してみてください

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

には、いくつかの注意事項:

  • あなたはEmployee参照、ないEmployeeIdスカラー
  • をマッピングする必要がありますWorkTimeTypeで何もしていないので、あなたのグループ化条項は含まれませんでした。これがあなたが望むものだと確信していますか? (再追加できます)