如何从SQL Server表中检索特定行?
我想知道是否有一种方法可以从包含100行的SQL表中检索第2行和第5行 我看到了一些使用如何从SQL Server表中检索特定行?,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我想知道是否有一种方法可以从包含100行的SQL表中检索第2行和第5行 我看到了一些使用WHERE子句的解决方案,但它们都假设应用WHERE子句的列是线性的,从1开始 如果SQL Server表中没有一个值从1开始的列,是否还有其他方法可以查询特定行的SQL Server表 另外,我知道一种使用临时表的解决方案,您可以复制select语句输出并向表中添加一个线性列。我正在将T-SQL与SQL Server一起使用: ; WITH Base AS ( SELECT *, ROW_NUMBE
WHERE
子句的解决方案,但它们都假设应用WHERE
子句的列是线性的,从1开始
如果SQL Server表中没有一个值从1开始的列,是否还有其他方法可以查询特定行的SQL Server表
另外,我知道一种使用临时表的解决方案,您可以复制select语句输出并向表中添加一个线性列。我正在将T-SQL与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\u 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
)。试试这个
SELECT * FROM (
SELECT
ROW_NUMBER() OVER (ORDER BY ColumnName ASC) AS rownumber
FROM TableName
) as temptablename
WHERE rownumber IN (2,5)
表中没有第二行或第五行
您返回的结果集中只有第二个或第五个结果,这取决于您在该查询中指定的顺序。sql数据检索的条件是什么您使用的是哪种sql?MySQL、MSSQL、Postgres等?您正在使用哪些RDBMS?Rownum功能现在在大多数系统中都可用,但根据系统的不同定义仍有很大差异。@UpvoteMarkAnswer-我的条件?我必须返回第5、6或7点的行。在关系表中没有“第二”行。您需要有某种“排序标准”才能识别“第二”行。对不起,我想您不明白,我没有从1开始的线性增量列。@AntunTun我告诉过您需要线性增量列吗?:-)如果您有
top
子句,您需要额外的orderby,否则无法保证您将得到第2行和第5行。@podyluska您可能是对的。。。虽然我总是按照ROW\u NUMBER()
对行进行排序,但如果我只使用它的话,这可能是一种副作用,并不是什么确定的事情。我知道,我在想非线性主键列的第二位