【问题标题】:How to get the current row number in an SQL Server 2000 query?如何获取 SQL Server 2000 查询中的当前行号?
【发布时间】:2010-12-17 01:23:21
【问题描述】:

在不支持 ROW_NUMBER() 函数的情况下,如何使用 SQL Server 2000 获取 SQL 查询中的行号?

【问题讨论】:

    标签: sql sql-server sql-server-2000


    【解决方案1】:
    【解决方案2】:

    您不能在 Sql Server 2000 中使用 Row_Number() - 它是在 2005 年推出的。

    如果您想使用 Row_Number 进行分页,这里有一些关于如何在 Sql 2000 中执行高效分页的想法:

    【讨论】:

      【解决方案3】:

      您总是可以尝试使用带有标识列的临时表

      DECLARE @table TABLE(
              [id] INT IDENTITY(1,1),
              Val VARCHAR(10)
      )
      
      DECLARE @TableFrom TABLE(
              Val VARCHAR(10)
      )
      INSERT INTO @TableFrom (Val) SELECT 'A'
      INSERT INTO @TableFrom (Val) SELECT 'B'
      INSERT INTO @TableFrom (Val) SELECT 'C'
      INSERT INTO @TableFrom (Val) SELECT 'D'
      
      INSERT INTO @table (Val) SELECT * FROM @TableFrom ORDER BY Val DESC
      SELECT * FROM @table
      

      我在 Sql Server 2000 中看到的一些最好的分页使用这种模式

      DECLARE @PageStart INT,
              @PageEnd INT
      
      SELECT  @PageStart = 51,
              @PageEnd = 100
      
      SELECT  <TABLE>.*
      FROM    (
                  SELECT  TOP (@PageStart - 1)
                          <ID>
                  FROM    (
                              SELECT  TOP (@PageEnd)
                                      <ID>
                              FROM    TABLE
                              ORDER BY <ID> ASC
                          ) SUB
                  ORDER BY SUB.<ID> DESC
              ) SUB INNER JOIN
              <TABLE> ON SUB.<ID> = <TABLE>.<ID>
      ORDER BY SUB.<ID>
      

      【讨论】:

      • 但是,这不是临时表而是表变量,200也不支持
      • SQL Server 2000 支持表变量
      【解决方案4】:

      您能否详细说明以下查询将如何解决问题?

      选择(选择总和(1)

      来自标本来源参考

      WHERE sample_source_rcd

      ) AS '行号'

      ,*

      来自 标本源参考注册

      【讨论】:

      • 这将为您提供小于或等于列表中当前项目的项目数,但不会为您提供唯一的 row_number,如果有重复的项目
      【解决方案5】:

      另一种使用身份创建临时表的方法:

      SELECT Field1, Field2, IDENTITY(int, 1,1) AS MyID 
      INTO #Temp 
      FROM Table1
      

      【讨论】:

        【解决方案6】:

        另一种不使用 SQL 定义函数的方法如下:

        SELECT 
        (SELECT COUNT(1) + 1 FROM YourTable t2 WHERE t2.Id < t.Id) AS RowNumber
        FROM YourTable t
        

        这有点棘手,但似乎比其他人给你的选项更简单。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-10-20
          • 2011-11-20
          • 1970-01-01
          • 1970-01-01
          • 2017-12-12
          • 2011-10-13
          • 2010-10-24
          • 2016-03-25
          相关资源
          最近更新 更多