166 sql sql-server row-number
我想用它ROW_NUMBER()来...
max(ROW_NUMBER())- >或者我猜这也是所有行的计数我试过做:
SELECT max(ROW_NUMBER() OVER(ORDER BY UserId)) FROM Users
Run Code Online (Sandbox Code Playgroud)
但它似乎没有工作......
ROW_NUMBER()使用给定的资料片,即得.如果我有一个名字,我想知道名字来自哪一行.我认为这将类似于我为#1尝试的东西
SELECT ROW_NUMBER() OVER(ORDER BY UserId) From Users WHERE UserName='Joe'
Run Code Online (Sandbox Code Playgroud)
但这也不起作用......
有任何想法吗?
Dar*_*ler 141
对于第一个问题,为什么不使用?
SELECT COUNT(*) FROM myTable
Run Code Online (Sandbox Code Playgroud)
得到数.
对于第二个问题,该行的主键是应该用于标识特定行的内容.不要尝试使用行号.
如果您在主查询中返回Row_Number(),
SELECT ROW_NUMBER() OVER (Order by Id) AS RowNumber, Field1, Field2, Field3
FROM User
Run Code Online (Sandbox Code Playgroud)
然后,当您想要返回5行时,您可以获取当前行号并使用以下查询来确定具有currentrow -5的行
SELECT us.Id
FROM (SELECT ROW_NUMBER() OVER (ORDER BY id) AS Row, Id
FROM User ) us
WHERE Row = CurrentRow - 5
Run Code Online (Sandbox Code Playgroud)
Ras*_*dit 42
虽然我同意其他人可以count()用来获取总行数,但以下是如何使用row_count():
要获得总行数:
with temp as (
select row_number() over (order by id) as rownum
from table_name
)
select max(rownum) from tempRun Code Online (Sandbox Code Playgroud)要获取名称为Matt的行号:
with temp as (
select name, row_number() over (order by id) as rownum
from table_name
)
select rownum from temp where name like 'Matt'Run Code Online (Sandbox Code Playgroud)您可以进一步使用min(rownum)或max(rownum)分别获取Matt的第一行或最后一行.
这些是非常简单的实现row_number().您可以将它用于更复杂的分组.在不使用子查询的情况下查看我对高级分组的响应
Muh*_*tar 24
如果需要返回表的总行数,可以使用该SELECT COUNT(*)语句的替代方法.
因为SELECT COUNT(*)进行全表扫描以返回行计数,所以对于大表可能需要很长时间.sysindexes在这种情况下,您可以使用系统表.有一ROWS列包含数据库中每个表的总行数.您可以使用以下select语句:
SELECT rows FROM sysindexes WHERE id = OBJECT_ID('table_name') AND indid < 2
Run Code Online (Sandbox Code Playgroud)
这将大大减少查询所需的时间.
小智 7
ROW_NUMBER() 返回以1开头的每一行的唯一编号.您只需编写以下内容即可轻松使用:
ROW_NUMBER() OVER (ORDER BY 'Column_Name' DESC) as ROW_NUMBER
Run Code Online (Sandbox Code Playgroud)
你可以找到之间的差异Row_number(),Rank()并Dense_Rank() 在这里.
小智 7
可能与这里的问题无关。但我发现它在使用时很有用ROW_NUMBER-
SELECT *,
ROW_NUMBER() OVER (ORDER BY (SELECT 100)) AS Any_ID
FROM #Any_Table
Run Code Online (Sandbox Code Playgroud)
您可以将其用于获取具有has子句的第一条记录
SELECT TOP(1) * , ROW_NUMBER() OVER(ORDER BY UserId) AS rownum
FROM Users
WHERE UserName = 'Joe'
ORDER BY rownum ASC
Run Code Online (Sandbox Code Playgroud)
小智 6
select
Ml.Hid,
ml.blockid,
row_number() over (partition by ml.blockid order by Ml.Hid desc) as rownumber,
H.HNAME
from MIT_LeadBechmarkHamletwise ML
join [MT.HAMLE] h on ML.Hid=h.HID
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
803674 次 |
| 最近记录: |