我想使用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()为以1开头的每一行返回一个唯一的数字。你可以简单地这样写:

ROW_NUMBER() OVER (ORDER BY 'Column_Name' DESC) as ROW_NUMBER

其他回答

如果需要返回表的总行数,可以使用SELECT count(*)语句以外的另一种方法。

因为SELECT COUNT(*)执行全表扫描以返回行数,对于一个大表可能需要很长时间。在这种情况下,可以使用sysindexes系统表。有一个ROWS列,其中包含数据库中每个表的总行数。你可以使用下面的select语句:

SELECT rows FROM sysindexes WHERE id = OBJECT_ID('table_name') AND indid < 2

这将大大减少查询所需的时间。

SELECT num, UserName FROM 
 (SELECT UserName, ROW_NUMBER() OVER(ORDER BY UserId) AS num
  From Users) AS numbered
WHERE UserName='Joe'

需要使用WITH表AS创建虚拟表,这在给定的查询中提到。

通过使用这个虚拟表,您可以执行CRUD操作w.r.t row_number。

查询:

WITH table AS
-
(SELECT row_number() OVER(ORDER BY UserId) rn, * FROM Users)
-
SELECT * FROM table WHERE UserName='Joe'
-

你可以在最后一句中使用INSERT, UPDATE或DELETE,而不用SELECT。

ROW_NUMBER()为以1开头的每一行返回一个唯一的数字。你可以简单地这样写:

ROW_NUMBER() OVER (ORDER BY 'Column_Name' DESC) as ROW_NUMBER

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

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