我想知道有没有办法从包含 100 行的 SQL 表中检索例如第 2 行和第 5 行?
我看到了一些带有WHERE
子句的解决方案,但它们都假设WHERE
应用子句的列是线性的,从 1 开始。
如果表没有值从 1 开始的列,是否还有其他方法可以查询 SQL Server 表中的特定行?
PS - 我知道一个带有临时表的解决方案,您可以在其中复制您的选择语句输出并向表中添加一个线性列。我正在使用 T-SQL
我想知道有没有办法从包含 100 行的 SQL 表中检索例如第 2 行和第 5 行?
我看到了一些带有WHERE
子句的解决方案,但它们都假设WHERE
应用子句的列是线性的,从 1 开始。
如果表没有值从 1 开始的列,是否还有其他方法可以查询 SQL Server 表中的特定行?
PS - 我知道一个带有临时表的解决方案,您可以在其中复制您的选择语句输出并向表中添加一个线性列。我正在使用 T-SQL
试试这个,
SELECT * FROM (
SELECT
ROW_NUMBER() OVER (ORDER BY ColumnName ASC) AS rownumber
FROM TableName
) as temptablename
WHERE rownumber IN (2,5)
使用 SQL Server:
; WITH Base AS (
SELECT *, ROW_NUMBER() OVER (ORDER BY id) RN FROM YourTable
)
SELECT *
FROM Base WHERE RN IN (2, 5)
id
您必须用您的主键或您的订单替换它,即YourTable
您的表。
这是一个 CTE(通用表表达式),所以它不是一个临时表。它将与您的查询一起扩展。
如果您使用的是 SQL Server 2005 或更高版本,则可以使用Row_Number()
函数。前任:
;With CTE as (
select col1, ..., row_number() over (order by yourOrderingCol) rn
from yourTable
)
select col1,...
from cte
where rn in (2,5)
请注意,这yourOrderingCol
将决定行号的值(即rn
)。
表中没有第 2 行或第 5 行。
您返回的结果集中只有第 2 个或第 5 个结果,由您在该查询中指定的顺序确定。