hql rank函数,在select中选择导致antlr异常

时间:2011-03-06 17:39:59

标签: nhibernate exception hql rank

我正在尝试使以下的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()吗?如果有,请举一个例子吗?

1 个答案:

答案 0 :(得分:0)

据我所知,RANK()目前尚未在NHibernate中实现。您可能想尝试将其注册为方言中的自定义函数。 Here's an example让你入门由于其语法,注册RANK可能比示例更复杂。