TSQL(SQL Server)使用row_number进行排序和分页

时间:2011-03-18 21:10:46

标签: sql-server tsql pagination

我有一个数据库(SQL Server)和应用程序,它可以获取数据并将其转换为JSON

我写了一个T-SQL查询来按userid列(DESC)订购数据,并且只获取前10行,但这会导致问题返回错误的结果。

例如,如果我有以下表格:

      UserID
      ---
      User1
      User2
      User3
      ...
      User10
      ..
      User25

我希望UserIDDESC并获得前10个结果(然后是第10个结果等)。简单的说我在MySQL LIMIT寻找SQL Server替代。

我的查询

SELECT * FROM 
   (SELECT  
       system_users_ranks.RankName,
       system_users.userid,
       system_users.UserName,
       system_users.Email, 
       system_users.LastIP, 
       system_users.LastLoginDate,
       row_number() OVER (ORDER BY system_users.userid) as myrownum
    FROM     
       system_users 
    INNER JOIN
       system_users_ranks 
       ON system_users.UserRank = system_users_ranks.rankid 
   ) as dertbl  
WHERE myrownum BETWEEN @startval AND @endval 
ORDER BY userid DESC

我无法将ORDER BY移至内部SELECT

1 个答案:

答案 0 :(得分:3)

你在内部SELECT中不需要它。

ROW_NUMBER有自己的ORDER BY,最终的演示文稿最后由最外面的ORDER BY定义。

您当前的查询可以正常使用。