0

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

4

1 回答 1

0

据我所知, RANK() 目前没有在 NHibernate 中实现。您可能想尝试将其注册为方言中的自定义函数。这是一个让您入门的示例。由于其语法,注册 RANK 可能比示例更复杂。

于 2011-03-06T18:51:42.100 回答