Устранение ROW_NUMBER () для SQL 2000 - PullRequest
2 голосов
/ 18 апреля 2011

Мне нужно перенести 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]

Ответы [ 3 ]

3 голосов
/ 18 апреля 2011

Использование таблицы временных показателей со столбцом идентификаторов для имитации 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
0 голосов
/ 18 апреля 2011

Вы можете создать таблицу переменных, задав «ROWID» значение INT Identity и вставив в него значения.

Вы также можете сделать это, не используя 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
0 голосов
/ 18 апреля 2011

Не слишком уверен, но вот отправная точка:

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
...