У меня есть следующий запрос:SQL Server ROW_NUMBER поведение
SELECT * 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
GROUP BY
a.TeacherID, a.UniversityID
) AS TeacherInfo
WHERE RowNum BETWEEN 10 AND 50
и она отлично работает. Теперь, если я хочу сделать что-то вроде:
SELECT * 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
GROUP BY
a.TeacherID, a.UniversityID
) AS TeacherInfo
WHERE RowNum BETWEEN 10 AND 50 AND UniversityID = 2
я ничего не получаю, потому что UniversityID = 2
начинается вокруг строки числа . Я хотел бы иметь возможность сбросить Row_Number
с различными UniversityID
.
Я попытался следующие:
SELECT *, ROW_NUMBER() OVER (ORDER BY TeacherID) AS RowNum
FROM
(
SELECT
a.TeacherID, a.UniversityID
FROM
SelectAll a
LEFT JOIN
mp_Ratings r ON a.TeacherID = r.TeacherID
GROUP BY
a.TeacherID, a.UniversityID
) AS TeacherInfo
WHERE UniversityID = 2
который приносит новый набор row_numbers
для каждого поиска, но если я пытаюсь использовать RowNum
псевдоним как таковой:
SELECT *, ROW_NUMBER() OVER (ORDER BY TeacherID) AS RowNum
FROM
(
SELECT
a.TeacherID, a.UniversityID
FROM
SelectAll a
LEFT JOIN
mp_Ratings r ON a.TeacherID = r.TeacherID
GROUP BY
a.TeacherID, a.UniversityID
) AS TeacherInfo
WHERE UniversityID = 2
AND RowNum BETWEEN 10 AND 20
Я получаю
Msg 207, уровень 16, состояние 1, строка 4 Недопустимое имя столбца «RowNum».
Что не так с моим выбором? Почему я не могу получить доступ к псевдониму RowNum
?
Спасибо, я уже имел ИНЕКЕ внутри внутреннего выбора, но я не заметил, я также имел пункт или который заставляющий выберите принести UniversityID = 1 и 2 (из-за ИЛИ). –