我正在尝试使以下的hql查询工作,但没有成功。我试图找出具有特定用户的等级,取决于表单中的字段值。在SQL中,这很有用。
SELECT tmp.rang
FROM (
SELECT b.ID as user, rank() as rang OVER (ORDER BY frh.Wert)
FROM EKB.KennzahlenManagement.FormularResultHistorie as frh
JOIN frh.Formular_Bogen_K_Feld fbkFeld
JOIN frh.Formular_Gesendent.Benutzer b
WHERE fbkFeld.FormularBogen.ID =:formularBogenId
AND fbkFeld.ResultFlag = 1
AND frh.Formular_Gesendent.Eingabe_nummer IN
(SELECT MAX(tmp.Eingabe_nummer)
FROM EKB.KennzahlenManagement.Formular_gesendet tmp
WHERE tmp.Benutzer.ID = frh.Formular_Gesendent.Benutzer.ID
AND tmp.Formular.ID = frh.Formular_Gesendent.Formular.ID
GROUP BY tmp.Benutzer
)
) as tmp
WHERE tmp.usr =:userId
到目前为止,我发现了两个问题。
1)我得到“NHibernate.Hql.Ast.ANTLR.QuerySyntaxException:类型'Antlr.Runtime.NoViableAltException'的异常被抛出。近线...”因为第二次选择。我怎么解决这个问题?任何解决方法?
2)rank()函数似乎有问题。我也得到了类似上面的异常。 HQL中没有rank()吗?如果有,请举一个例子吗?
答案 0 :(得分:0)
据我所知,RANK()目前尚未在NHibernate中实现。您可能想尝试将其注册为方言中的自定义函数。 Here's an example让你入门由于其语法,注册RANK可能比示例更复杂。