我必须迁移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]发布于 2011-04-19 00:28:23
在性能方面,使用包含标识列的临时表来模拟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-19 00:28:07
不太确定,但这里是一个起点:
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-19 00:29:19
您可以创建一个变量表,为"ROWID“提供一个整型标识值,并将这些值插入其中。
您也可以在不使用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
ENDhttps://stackoverflow.com/questions/5705855
复制相似问题