我只是在实现以下功能的最佳方法之后。
基本上,我正在查询表,我想从两个不同的行中获取数据。
更好地解释一下:
我们说Table'myTable'有3列'StudentID','StudentName','StudentPercentage'。
我将学生ID作为参数传递给存储过程,该存储过程应该返回学生的等级,以及排名第一的学生的姓名和学生ID。
要计算等级,我使用 -
ROW_NUMBER() OVER (ORDER BY StudentPercentage DESC) AS Rank
因此,如果传递给存储过程的参数(学生ID)为'1',则数据类似于此(First Rank的学生详细信息+学生ID作为参数传递的学生的详细信息):
StudentID StudentName StudentPercentage Rank
5 A 96 1
1 C 84 6
我想要返回的数据是:
A (第一名的学生姓名), 96 (第一名的学生百分比), 6 (ID通过的学生的等级作为一个论点)。
我无法找到获得理想结果的方法。
任何帮助都会很棒!
感谢。
P.S。 - 我写的代码是在C#连接到SQL数据库。虽然在这里,但我想看到的是存储过程如何返回这些数据。简而言之,专注于SQL查询。
答案 0 :(得分:1)
选择第一个学生,然后通过相关子查询获得传入的学生。
类似的东西:
select
x.StudentName, x.StudentPercentage,
(select ROW_NUMBER() OVER (ORDER BY StudentPercentage DESC) AS Rank where studentID=@myStudentID)
from
(
select StudentName, StudentPercentage,ROW_NUMBER() OVER (ORDER BY StudentPercentage DESC) AS Rank
)x
where x.Rank=1
您应该使用RANK()而非ROW_NUMBER,以便处理关系。
答案 1 :(得分:0)
我认为你正在寻找以下内容:
Select Top(1) StudentName,
StudentPercentage,
(YOUR RANKING SELECTION CODE HERE AS A SUBQUERY Where StudentId = @StudentId) as Rank
From myTable
Order By StudentPercentage Desc
只需使用子查询。