Sql 如何查找记录的行号?
考虑下表中的示例Sql 如何查找记录的行号?,sql,sql-server,Sql,Sql Server,考虑下表中的示例 ProductDetailNo ProductDescription 224 Apples 225 Tomatoes 226 Potatoes 如何列出所选行的行号,如下图所示 RowNo ProductDetailNo Product Description 2 225
ProductDetailNo ProductDescription
224 Apples
225 Tomatoes
226 Potatoes
如何列出所选行的行号,如下图所示
RowNo ProductDetailNo Product Description
2 225 Tomatoes
无论数据库中的逻辑行是什么,在查询中使用row_number()只会为单个记录返回1 always
谢谢,达米恩。试试这个
WITH MyTable AS
(
SELECT ProductDetailNo, ProductDescription,
ROW_NUMBER() OVER ( ORDER BY ProductDetailNo ) AS 'RowNumber'
FROM Product
)
SELECT RowNumber, ProductDetailNo
FROM MyTable
WHERE ProductDetailNo = 225
您收到的行号来自结果的行数。i、 如果结果只有一个元组,则行号将始终为1 要获取整个表的行号,您应该向表中添加一个额外的属性,RowNo,并自动递增 希望这有帮助,但SQL可能会为您提供更好的解决方案 这个怎么样
SELECT RowNo, ProductDetailNo, ProductDescription
FROM (SELECT ROW_NUMBER() as RowNo, ProductDetailNo, ProductDescription
FROM TheTable) as t
WHERE ProductDetailNo = 225;
表行没有固有的行号
ROW_NUMBER()
只提供特定结果集中的行号。因此,当结果集仅包含1条记录时,您总是会得到1
。如果您想要一个行号,那么您的表架构应该包括类似于自动递增的标识列的内容。请检查此项
WITH ArticleSearch AS
(
SELECT
ROW_NUMBER() OVER
(
ORDER BY tblProducts.ProductDetailNo
) AS RowNumber,
tblProducts.ProductDetailNo,
tblProducts.ProductDescription
FROM
tblProducts
)
SELECT
a.RowNumber AS SlNo,
a.ProductDetailNo,
a.ProductDescription
FROM
ArticleSearch a
WHERE
a.ProductDetailNo=225
row_number()获取查询结果并对其进行编号。如果查询只返回一行,则行号()将始终为1。谢谢你的信息,布兰登,但一定有办法,一定有办法。向查询的表添加(或使用)唯一键,并使用唯一键反向引用结果。如果ProductDetailNo是唯一的,您也可以将其用作反向引用。您是在谈论标识字段吗?数据库中的行是无序的一组或多行,您可以在查询中使用order by
进行排序。因此,没有“逻辑”行号可供查询。您想对行号做什么?也许还有其他方法可以做你想做的事。试试这个。这将只返回一行,它将包含最后一列Rownumber,该列将在正在工作的数据中显示其行号,但内部选择将对所有记录运行,因为where子句在外部。是的,内部选择将对所有记录运行,因为我们需要每个记录的行号。然后,我们可以使用外部查询筛选结果,因为行号实际上是在运行时创建的。这就是为什么我们需要内部选择。。如果需要其他方法,则必须创建一些触发器,将行号存储在列中,以便在运行时无需对行进行编号即可轻松获得结果。@DamienJoe-内部选择可能必须访问或不必访问所有行-它肯定需要确定将分配的行号,但是它可以通过其他方式来确定-SQL的全部要点是告诉它你想要什么,而不是如何做,然后它尝试确定最佳的方法。感谢Vinyak,我不知道下一票是为了什么,但我仍然希望有一些SQL magic=)这很好,但内部查询将对表中的所有行运行。你有其他的解决办法吗?嗯,为了给事情编号,你必须知道所有的事情。这是解决您当前问题的最佳解决方案。当然,ROW_NUMBER()
返回的值在每次执行此查询时可能不同,如果没有ORDER by
(这是否有效?)是,没有ORDER by
,返回记录的顺序未定义。嘿,内部选择将对所有记录运行?嘿,Bobby,SQL有一种方法。
WITH productCTE
AS
(SELECT ROW_NUMBER() OVER(ORDER BY ProductDetailNo, ProductDescription) AS RowNo, ProductDetailNo, ProductDescription
FROM tbl_Products
)
SELECT * FROM productCTE
WHERE RowNo = 2