3

我想知道有没有办法从包含 100 行的 SQL 表中检索例如第 2 行和第 5 行?

我看到了一些带有WHERE子句的解决方案,但它们都假设WHERE应用子句的列是线性的,从 1 开始。

如果表没有值从 1 开始的列,是否还有其他方法可以查询 SQL Server 表中的特定行?

PS - 我知道一个带有临时表的解决方案,您可以在其中复制您的选择语句输出并向表中添加一个线性列。我正在使用 T-SQL

4

4 回答 4

7

试试这个,

SELECT * FROM (
  SELECT
    ROW_NUMBER() OVER (ORDER BY ColumnName ASC) AS rownumber
    FROM TableName
)  as temptablename
WHERE rownumber IN (2,5)
于 2013-09-13T12:24:58.227 回答
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(通用表表达式),所以它不是一个临时表。它将与您的查询一起扩展。

于 2013-09-13T12:20:31.067 回答
2

如果您使用的是 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)。

于 2013-09-13T12:22:09.833 回答
2

表中没有第 2 行或第 5 行。

您返回的结果集中只有第 2 个或第 5 个结果,由您在该查询中指定的顺序确定。

于 2013-09-13T12:28:53.527 回答