作为序言,我远非程序员。不幸的是,我的任务是修改一个使用 SQL 作为数据库的 ASP .NET 基于 Web 的输入板,该数据库是由我工作的公司的前雇员创建的。尽管不是程序员,但我的雇主似乎仍然想把这个扔给我,所以如果我太含糊,我很抱歉。
基本上,我需要修改以下函数中的 SQL 查询,以从“rsRank”列中获取第二小的值,而不是最小的(基本上是排名第二的员工,其状态为“In”,而不是排名最高的为目前是)。我能够在 SQL 管理工作室中构建一个 SQL 查询,没有任何问题来获得我需要的值,但不知道如何在下面的代码中实现它。我对 nhibernate/HQL 以及映射等如何工作几乎一无所知。
public Employee GetCurrentDesignatedRS()
{
using (ISession session = _nhHelper.OpenSession())
{
var employee = session.CreateQuery("from Employee emp1 where emp1.rsRank = (select min(emp2.rsRank) from Employee emp2 where emp2.Status = 'In' and emp2.rsRank > 0)").UniqueResult<Employee>();
return employee;
}
}
下面是我所做的 SQL 查询,它得到了我需要的值:
select top 1 emp2.rsRank from Employee emp2 where emp2.rsRank > (select min(emp2.rsRank) from Employee emp2) and emp2.Status='In'
当然,如果我简单地将其插入现有查询的位置,我会得到以下异常:
Message: Exception of type 'Antlr.Runtime.NoViableAltException' was thrown. near line 1, column 87 [from CompanyName.InOut.Library.Entities.Employee emp1 where emp1.rsRank = (select top 1 emp2.rsRank from CompanyName.InOut.Library.Entities.Employee emp2 where emp2.rsRank > (select min(emp2.rsRank) from CompanyName.InOut.Library.Entities.Employee emp2) and emp2.Status='In')]
我认为这是一个远射,但如果有人至少能指出我正确的方向,我将不胜感激。