请教一个简单的分页查询的错误

会思考的草 2011-06-02 03:48:48
两个表,一个表叫做blacklist,记录被列入黑名单的用户基本信息,另一个表叫做OpsHistory,记录所有用户非法操作的历史,凡是在一定期间内有违规超过一定次数的,就会被记录入黑名单。
admin登录进来后,能看到黑名单的总览,需要将黑名单的信息提取出来,同时针对每个黑名单上的人,统计一下他做了多少次违规操作,我写了一个分页查询,但是出错了:

SELECT
ROW_NUMBER() OVER (ORDER BY L.BlockedDate DESC) AS RowNo,
L.UserId, UserName, UserGender, UserBirthday, BlockedDate, ReleaseDate, R.OpsCnt
FROM
Blacklist AS L
INNER JOIN
(SELECT UserId, COUNT(UserId) AS OpsCnt FROM OpsHistory GROUP BY UserId) AS R
ON L.UserId = R.UserId
WHERE RowNo BETWEEN ((@PageIndex - 1) * @PageSize + 1) AND @PageIndex * @PageSize

报错说:
Msg 207, Level 16, State 1, Line 16
Invalid column name 'RowNo'.
Msg 207, Level 16, State 1, Line 16
Invalid column name 'RowNo'.

我猜想是不是where在select之前执行,所以where子句不知道rowno这列?
...全文
41 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
FlySQL 2011-06-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 codewarrior 的回复:]
谢谢楼上,为什么where看不到ROW_NUMBER生成的列呢?
[/Quote]

执行顺序的问题,查询会先执行where部分的语句,再执行select部分的语句
会思考的草 2011-06-02
  • 打赏
  • 举报
回复
谢谢楼上,为什么where看不到ROW_NUMBER生成的列呢?
FlySQL 2011-06-02
  • 打赏
  • 举报
回复
select *
from
(
SELECT
ROW_NUMBER() OVER (ORDER BY L.BlockedDate DESC) AS RowNo,
L.UserId, UserName, UserGender, UserBirthday, BlockedDate, ReleaseDate, R.OpsCnt
FROM
Blacklist AS L
INNER JOIN
(SELECT UserId, COUNT(UserId) AS OpsCnt FROM OpsHistory GROUP BY UserId) AS R
ON L.UserId = R.UserId
) t
WHERE RowNo BETWEEN ((@PageIndex - 1) * @PageSize + 1) AND @PageIndex * @PageSize

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧