我想使用ROW_NUMBER()来获得…

得到max(ROW_NUMBER())——>或者我猜这也将是所有行的计数

我试着这样做:

SELECT max(ROW_NUMBER() OVER(ORDER BY UserId)) FROM Users

但这似乎并不奏效……

要获得ROW_NUMBER()使用一个给定的信息,即。如果我有一个名字,我想知道它来自哪一行。

我认为这将类似于我在第1条中所尝试的内容

SELECT ROW_NUMBER() OVER(ORDER BY UserId) From Users WHERE UserName='Joe'

但这也不管用……

什么好主意吗?


当前回答

可以使用Row_Number限制查询结果。

例子:

SELECT * FROM (
    select row_number() OVER (order by createtime desc) AS ROWINDEX,* 
    from TABLENAME ) TB
WHERE TB.ROWINDEX between 0 and 10

-- 通过上述查询,我将从TABLENAME中获得PAGE 1的结果。

其他回答

对于第一个问题,为什么不直接用?

SELECT COUNT(*) FROM myTable 

为了得到计数。

对于第二个问题,行的主键是用来标识特定行的。不要尝试使用行号。


如果在主查询中返回Row_Number(),

SELECT ROW_NUMBER() OVER (Order by Id) AS RowNumber, Field1, Field2, Field3
FROM User

然后,当您想返回5行时,您可以获取当前行号并使用以下查询来确定currentrow为-5的行

SELECT us.Id
FROM (SELECT ROW_NUMBER() OVER (ORDER BY id) AS Row, Id
     FROM User ) us 
WHERE Row = CurrentRow - 5   
SELECT num, UserName FROM 
 (SELECT UserName, ROW_NUMBER() OVER(ORDER BY UserId) AS num
  From Users) AS numbered
WHERE UserName='Joe'

可以使用Row_Number限制查询结果。

例子:

SELECT * FROM (
    select row_number() OVER (order by createtime desc) AS ROWINDEX,* 
    from TABLENAME ) TB
WHERE TB.ROWINDEX between 0 and 10

-- 通过上述查询,我将从TABLENAME中获得PAGE 1的结果。

你可以使用这个来获取第一个有子句的记录

SELECT TOP(1) * , ROW_NUMBER() OVER(ORDER BY UserId) AS rownum 
FROM     Users 
WHERE    UserName = 'Joe'
ORDER BY rownum ASC

这个查询:

SELECT ROW_NUMBER() OVER(ORDER BY UserId) From Users WHERE UserName='Joe'

返回所有用户名是'Joe'的行,除非你没有用户名='Joe'

它们将按照UserID的顺序列出,row_number字段将以1开头并增加,但许多行包含UserName='Joe'

如果它对您不起作用,那么您的WHERE命令有问题,或者表中没有UserID。检查UserID和UserName字段的拼写。