2

Microsoft SQL Server 2000 で動作するように SQL を移行する必要があります。残念ながら、現在の SQL は、このバージョンではまだサポートされていない関数 ROW_NUMBER() を使用しています。したがって、私は似たようなものを見つけなければなりません。

私のSQLの下(すべての列をリストする代わりに*を使用しました)

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

3 に答える 3

3

ID 列を持つ一時テーブルを使用して 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 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
于 2011-04-18T16:29:19.197 に答える