首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >消除SQL2000的ROW_NUMBER()

消除SQL2000的ROW_NUMBER()
EN

Stack Overflow用户
提问于 2011-04-19 00:19:41
回答 3查看 1.7K关注 0票数 2

我必须迁移sql才能在Microsoft SQL Server 2000上工作。不幸的是,当前的sql使用函数ROW_NUMBER(),这个版本还不支持该函数。因此,我必须找到类似的东西。

在我的SQL下面(我使用*而不是列出所有列)

代码语言:javascript
复制
SELECT [Id], ROW_NUMBER() OVER (ORDER BY InstallmentNumber, ID ASC) AS ROWID
FROM [ARAS].[ARAS].[Movement]
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-19 00:28:23

在性能方面,使用包含标识列的临时表来模拟ROW_NUMBER可能是最佳选择:

代码语言:javascript
复制
CREATE TABLE #tmpRowNum (
    ROWID INT IDENTITY(1,1),
    ID INT
)

INSERT INTO #tmpRowNum
    (ID)
    SELECT ID
        FROM [ARAS].[ARAS].[Movement]
        ORDER BY InstallmentNumber, ID
票数 3
EN

Stack Overflow用户

发布于 2011-04-19 00:28:07

不太确定,但这里是一个起点:

代码语言:javascript
复制
SELECT [Id],
  ( SELECT SUM(1)
    FROM [ARAS].[ARAS].[Movement]
    WHERE InstallmentNumber <= OuterMovement.InstallmentNumber
      AND ID <= OuterMovement.ID
  ) AS ‘Row Number’
FROM [ARAS].[ARAS].[Movement] AS OuterMovement
票数 0
EN

Stack Overflow用户

发布于 2011-04-19 00:29:19

您可以创建一个变量表,为"ROWID“提供一个整型标识值,并将这些值插入其中。

您也可以在不使用ROWID的情况下执行此操作。虽然表演不会很棒。

代码语言:javascript
复制
DECLARE @id INT, @SUM INT
SELECT @id = MIN([Id]) FROM [ARAS].[ARAS].[Movement]    


WHILE EXISTS (SELECT [Id] FROM [ARAS].[ARAS].[Movement] WHERE [Id] >= @id)
BEGIN
    ... do something with the ID ..
    SELECT @SUM = SUM(...) FROM [ARAS].[ARAS].[Movement] WHERE [Id] > @id

    SELECT @id = MIN([Id]) FROM [ARAS].[ARAS].[Movement] WHERE [Id] > @id
END
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5705855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档