如何从SQL Server表中检索特定的行?

时间:2013-09-13 12:17:39

标签: sql sql-server sql-server-2012

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

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

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

P.S。 - 我知道有一个临时表的解决方案,你可以复制select语句输出并在表中添加一个线性列。我正在使用T-SQL

4 个答案:

答案 0 :(得分:7)

试试这个,

SELECT * FROM (
  SELECT
    ROW_NUMBER() OVER (ORDER BY ColumnName ASC) AS rownumber
    FROM TableName
)  as temptablename
WHERE rownumber IN (2,5)

答案 1 :(得分:5)

使用SQL Server:

; WITH Base AS (
    SELECT *, ROW_NUMBER() OVER (ORDER BY id) RN FROM YourTable
)

SELECT *
    FROM Base WHERE RN IN (2, 5)

您必须使用主键或订单替换idYourTable这是您的表格。

这是一个CTE(公用表表达式),因此它不是临时表。它将与您的查询一起扩展。

答案 2 :(得分: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)。

答案 3 :(得分:2)

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

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