SQL存储过程组合来自两行的数据

时间:2011-12-13 04:37:00

标签: sql sql-server stored-procedures

我只是在实现以下功能的最佳方法之后。

基本上,我正在查询表,我想从两个不同的行中获取数据。

更好地解释一下:

我们说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查询。

2 个答案:

答案 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  

只需使用子查询。