2010-05-05 2 views
3

SQL Server 2008을 사용하고 있습니다. 다음 필드가있는 Student 테이블이 있습니다. 1. StudentId, 2. StudentName, 3. 표시. "Position"이라는 열이 있어야하는 결과를 원합니다. "StudentId, StudentName, Marks, Student from Position ..."과 같은 것이므로 학생이 득점 한 점수에 따라 1 위, 2 위 또는 20 위를 평가할 수 있습니다. 학생들이 같은 점수를 가지고 있다면, 그들은 같은 지위를가집니다. 감사합니다. . 을 RhysSQL 서버 : 마크 기반 위치

답변

7

사용 RANK는 두 개 이상의 행이 순위에 대한 묶을 경우

, 각 묶여 행은 같은 순위를받습니다. 예를 들어, 두 명의 최고 영업 사원이 동일한 SalesYTD 값을 갖고 있으면 둘 다 하나의 순위가 매겨집니다. 그 다음으로 가장 높은 SalesYTD를 가진 영업 사원은 3 위에 랭크됩니다. 왜냐하면 2 개의 행이 더 높은 순위에 있기 때문입니다. 따라서 RANK 함수는 항상 연속 정수를 반환하지는 않습니다.

쿼리는 다음과 같이 수 :

SELECT 
    StudentId, 
    StudentName, 
    Marks, 
    RANK() OVER (ORDER BY Marks DESC) AS Position 
FROM Student 
+1

다음은 순위 지정 기능에 대한 MSDN 설명서입니다. http://msdn.microsoft.com/en-us/library/ms189798.aspx – David

+0

+1 완벽, ROW_NUMBER()을 (를) 생각하고 있었지만 RANK()가 중복 된 마크를 완벽하게 처리했습니다. –

1

당신은 위치를 계산하는 하위 쿼리를 사용할 수 있습니다. 순위는 단순히 높은 점수를 가진 학생의 수보다 하나 많습니다.

select 
    s.StudentId, s.StudentName, s.Marks, 
    Position = 1 + (select count(*) from Students m where m.Marks > s.Marks) 
from 
    Students s 
+0

간단한 답변을 주셔서 감사합니다. 그것은 나를 위해 그것을했다. 또한 위의 Mark Byers가 제안한 DENSE_RANK() 함수도 트릭을 수행함을 알았습니다. :-) – Rhys