【问题标题】:the row no in query output查询输出中的行号
【发布时间】:2025-12-24 16:00:12
【问题描述】:

我在表格中有一个数字字段(比如 num)和 pkey。

select * from mytable order by num

现在我如何在我拥有 pkey 的特定行的查询输出中获取行号。

我正在使用 sql 2000。

【问题讨论】:

    标签: sql sql-server-2000 row-number


    【解决方案1】:

    听起来您希望返回的每条记录都有一个行号。

    在 SQL 2000 中,您可以这样做:

    SELECT (SELECT COUNT(*) FROM MyTable t2 WHERE t2.num <= t.num) AS RowNo, *
    FROM MyTable t
    ORDER BY num
    

    假定 num 是唯一的。如果不是,那么您必须使用 PK 字段并按此排序。

    或者,使用临时表(或表变量):

    CREATE TABLE #Results
    (
    RowNo INTEGER IDENTITY(1,1),
    MyField VARCHAR(10)
    )
    
    INSERT #Results
    SELECT MyField
    FROM MyTable 
    ORDER BY uum
    
    SELECT * FROM #Results
    
    DROP TABLE #Results
    

    在 SQL 2005 中,您可以使用一个 ROW_NUMBER() 函数,它可以让生活变得更轻松。

    【讨论】:

    • 如果我只有 1 个字段,第一个 sol 有效,超过 1 个则无效。如何在 ado.net 中使用临时表?
    • 就个人而言,我会将查询包装到存储过程中,然后调用它。您可以按原样发送查询 (CommandType=CommandType.Text)。
    【解决方案2】:

    据我了解,您希望获得返回的所有行数,对吗? 如果是这样,请使用@@rowcount

    【讨论】:

    • 哈哈!是的,我过去曾练习过很多措辞奇怪的问题:)
    • 我想要查询结果中特定行(不是所有行)的序列号。
    【解决方案3】:

    正如 Ada 指出的,这项任务在 SQL Server 2005 中变得容易得多......

    SELECT whatever, RowNumber from (
         SELECT pk
               , whatever
              , ROW_NUMBER() OVER(ORDER BY num) AS 'RowNumber'
        FROM mytable
    )
    WHERE pk = 23;
    

    【讨论】:

    • ROW_NUMBER() 函数在 sql 2000 中不可用