两个表,一个表叫做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这列?

解决方案 »

  1.   

    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
      

  2.   

    谢谢楼上,为什么where看不到ROW_NUMBER生成的列呢?
      

  3.   


    执行顺序的问题,查询会先执行where部分的语句,再执行select部分的语句