SQLServer 行番号を取得する

SQLServerで行番号を取得するには
ROW_NUMBER() を使用する。

とりあえずMSDNを見てみたらこんな風に書いてあった。

ROW_NUMBER ( )     OVER ( [  ]  )

以下のようなPersonテーブルがあるとして

ID   Name   Class
                                      • -
1 山田 A 2 鈴木 A 3 佐藤 B 4 高橋 C

これに対して

SELECT
  ROW_NUMBER() OVER(ORDER BY ID DESC) RN
 ,*
FROM
  Person
ORDER BY
  ID DESC;

というクエリを投げれば結果は以下のようになる

RN  ID  Name  Class
                                      • -
1 4 高橋 C 2 3 佐藤 B 3 2 鈴木 A 4 1 山田 A

OVER内にPARTITIONを設定すればクラス毎に番号を触れる

SELECT
  ROW_NUMBER() OVER(PARTITION BY Class ORDER BY ID DESC) RN
 ,*
FROM
  Person
ORDER BY
  ID DESC;

                                      • -
RN ID Name Class
                                      • -
1 4 高橋 C 1 3 佐藤 B 1 2 鈴木 A 2 1 山田 A

動作チェックはしたけど、コピペミスってたりするかもしれない
持ってく場合には要チェック