如何获取表中记录的位置SQL Server

问题描述

|| 问题如下: 我需要获取表中记录的位置。假设我在表中有五个记录:
Name: john doe,ID: 1
Name: jane doe,ID: 2
Name: Frankie Boy,ID: 4
Name: Johnny,ID: 9
现在,“ Frankie Boy”位于表中的第三位。但是如何从SQL Server获取此信息?我可以算出ID,但它们不可靠,Frankie的ID为4,但由于删除了ID为'3 \'的记录,因此处于第三位置。 有办法吗?我知道ROW_RANK,但这会很昂贵,因为在对row_rank进行排名之前,我需要首先选择整个集合。 我正在使用MS SQL Server 2008 R2。     

解决方法

表格没有\'position \'。表(= set)中的行由其主键值标识。仅结果行具有\'position \',当存在
ORDER BY
子句时可以确定。假设表(=集合)有位置,只会导致问题,而且是错误的思维方式。     ,您可以使用ѭ2来标记行。您必须指定一种对行进行排序的方法:
select  row_number() over (order by id) as PositionInTable,*
from    YourTable
如果性能存在问题,则可以将该职位存储在新列中:
update  yt1
set     PositionInTable = rn
from    YourTable yt1
join    (
        select  row_number() over (order by id) as rn,id
        from    YourTable
        ) yt2
on      yt1.id = yt2.id
索引为
PositionInTable
时,闪电般快。但是您必须在每次插入表后进行更新。     ,表在概念上没有顺序。除非您在select语句中指定ORDER BY对结果集进行排序,否则结果可以按任何顺序返回。重复执行完全相同的SQL,可能会在每次执行时以不同的顺序返回结果集。 要获取特定结果集中的行号,请使用row_number()函数:
select row = row_number() over( order by id ),*
from sysobjects
这将为sysobjects中的每一行分配一个行号,就好像该表按ID排序一样。     ,一个无需使用ROW_NUMBER即可执行此操作的简单方法是,简单地计算表中有多少行的索引小于或等于所选索引,这将给出行号。
SELECT COUNT(*) FROM YourTable WHERE ID <= 4 -- Frankie Boy,Result = 3
对于您的特定情况,这可能不是最有效的方法,但是这是实现它的简单方法。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...