Han*_*año 1 row-number sql-server-2008
我有以下查询:
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
Run Code Online (Sandbox Code Playgroud)
它工作正常.现在,如果我想做类似的事情:
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
Run Code Online (Sandbox Code Playgroud)
我什么也没得到,因为第2991UniversityID = 2行开始了.我希望能够重置每个不同的.Row_NumberUniversityID
我尝试了以下方法:
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
Run Code Online (Sandbox Code Playgroud)
它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
Run Code Online (Sandbox Code Playgroud)
我明白了
消息207,级别16,状态1,行4无效的列名称'RowNum'.
我的选择出了什么问题?为什么我不能访问RowNum别名?
您只需将WHERE子句移动到内部查询.
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;
Run Code Online (Sandbox Code Playgroud)
您无法访问RowNum查询外部版本中的别名,因为别名尚不存在.SELECT在之前解析倒数第二个ORDER BY.WHERE之前处理过SELECT.
| 归档时间: |
|
| 查看次数: |
13343 次 |
| 最近记录: |