Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Verhalten von SQL Server ROW_NUMBER

Sie müssen nur das WHERE verschieben -Klausel zur inneren Abfrage.

SELECT TeacherID, UniversityID, RowNum FROM
(
    SELECT a.TeacherID, a.UniversityID, ROW_NUMBER() OVER 
     (ORDER BY a.TeacherID) AS RowNum FROM SelectAll a
     LEFT JOIN mp_Ratings r 
     ON a.TeacherID = r.TeacherID 
     WHERE UniversityID = 2
     GROUP BY a.TeacherID, a.UniversityID
) as TeacherInfo WHERE RowNum BETWEEN 10 AND 50;

Sie können nicht auf RowNum zugreifen Alias ​​in der äußeren Version der Abfrage, da der Alias ​​noch nicht existiert. SELECT wird vor ORDER BY als vorletztes geparst . WHERE wird vor SELECT verarbeitet .