sql >> Base de Datos >  >> RDS >> Sqlserver

Comportamiento de ROW_NUMBER de SQL Server

Solo necesitas mover el WHERE cláusula a la consulta interna.

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;

No puede acceder al RowNum alias en la versión externa de la consulta porque el alias aún no existe. SELECT se analiza penúltimo, antes de ORDER BY . WHERE se procesa antes de SELECT .