2

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

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

SELECT [Id], ROW_NUMBER() OVER (ORDER BY InstallmentNumber, ID ASC) AS ROWID
FROM [ARAS].[ARAS].[Movement]
4

3 回答 3

3

使用带有标识列的临时表来模拟 ROW_NUMBER 可能是您最好的选择:

CREATE TABLE #tmpRowNum (
    ROWID INT IDENTITY(1,1),
    ID INT
)

INSERT INTO #tmpRowNum
    (ID)
    SELECT ID
        FROM [ARAS].[ARAS].[Movement]
        ORDER BY InstallmentNumber, ID
于 2011-04-18T16:28:22.843 回答
0

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

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
于 2011-04-18T16:28:06.500 回答
0

您可以制作一个变量表,为“ROWID”提供一个 INT 标识值并将这些值插入其中。

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

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
于 2011-04-18T16:29:19.197 回答