如何查找记录的行号?

时间:2012-01-05 07:02:40

标签: sql sql-server

考虑下面的示例表

ProductDetailNo    ProductDescription
      224                Apples
      225                Tomatoes
      226                Potatoes

如何列出所选行的行号,如下所示?

RowNo    ProductDetailNo          Product Description
  2         225                Tomatoes

在我的查询中使用row_number()只返回1对于单个记录,不管数据库中的逻辑行是什么。

谢谢,Damien。

6 个答案:

答案 0 :(得分:12)

试试这个

WITH MyTable AS
(
    SELECT ProductDetailNo, ProductDescription,
    ROW_NUMBER() OVER ( ORDER BY ProductDetailNo ) AS 'RowNumber'
    FROM Product
) 
SELECT RowNumber, ProductDetailNo     
FROM MyTable 
WHERE ProductDetailNo = 225

答案 1 :(得分:3)

请检查此

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

答案 2 :(得分:2)

这个怎么样?

SELECT RowNo, ProductDetailNo, ProductDescription
FROM (SELECT ROW_NUMBER() as RowNo, ProductDetailNo, ProductDescription
      FROM TheTable) as t
WHERE ProductDetailNo = 225;

答案 3 :(得分:2)

表行没有固有的行号。 ROW_NUMBER()仅为特定结果集中的行提供行号。因此,当结果集仅包含1条记录时,预期结果是总是得到1。如果您需要行号,则表格架构应包含类似自动递增IDENTITY列的内容。

答案 4 :(得分:2)

  WITH productCTE 
  AS
  (SELECT ROW_NUMBER() OVER(ORDER BY ProductDetailNo, ProductDescription) AS RowNo, ProductDetailNo, ProductDescription
   FROM tbl_Products
  )
  SELECT * FROM productCTE
  WHERE RowNo = 2

答案 5 :(得分:0)

您收到的行号来自结果行数。即如果你的结果只有一个元组,那么行号。永远是1。

要获取整个表格的行号,您应该在表格中添加一个额外的属性,一个带有自动增量的 RowNo

希望这会有所帮助,但SQL可能会为您提供更好的解决方案!