SQLServer 連番の付け方 ROW_NUMBER

SQLServerでの連番の付け方を紹介していきます。
SELECT文で取得した結果に連番を振るには、ROW_NUMBER()を使っていきましょう。

今回は、1つのテーブルを使用していきます。

SELECT * FROM hironimoTable

id   |nickName|animal|height|weight
-----+--------+------+------+------
00001|ひろにも|きりん|150   |55.5
00002|ひろにも|きりん|160   |60.0
00003|ひろにも|きりん|170   |70.0
00004|ひろにも|きりん|180   |80.0
00005|ひろにも|きりん|150   |90.0
00006|たなか  |いぬ  |100   |10.0
00007|たなか  |いぬ  |120   |20.0
00008|すずき  |ねこ  |120   |30.0
00009|すずき  |ねこ  |130   |40.0
00010|すずき  |ぞう  |140   |50.0
00011|すずき  |ぞう  |150   |60.0
00012|さとう  |ぞう  |150   |50.0
00013|さとう  |ぞう  |160   |60.0
00014|さとう  |きりん|170   |70.0
00015|さとう  |きりん|180   |80.0

 

ROW_NUMBER 連番の付け方

連番を振る方法

連番の付けるには、下記のような書き方をしましょう。

ROW_NUMBER()OVER(ORDER BY 項目)

 

それでは、例を見てみましょう。
先ほどのテーブルに、連番を付けていきます。連番は、OrderBYで指定した順番に着けることができます。
今回は、nickNameの昇順、animalの降順、に並べて連番を振っています。

SELECT
  ROW_NUMBER()OVER(ORDER BY nickName,animal DESC) AS rownumber
 ,id
 ,nickName
 ,animal
 ,height
 ,weight
FROM
  hironimoTable


結果
rownumber|id   |nickName|animal|height|weight
---------+-----+--------+------+------+------
1        |00012|さとう  |ぞう  |150   |50.0
2        |00013|さとう  |ぞう  |160   |60.0
3        |00014|さとう  |きりん|170   |70.0
4        |00015|さとう  |きりん|180   |80.0
5        |00008|すずき  |ねこ  |120   |30.0
6        |00009|すずき  |ねこ  |130   |40.0
7        |00010|すずき  |ぞう  |140   |50.0
8        |00011|すずき  |ぞう  |150   |60.0
9        |00006|たなか  |いぬ  |100   |10.0
10       |00007|たなか  |いぬ  |120   |20.0
11       |00001|ひろにも|きりん|150   |55.5
12       |00002|ひろにも|きりん|160   |60.0
13       |00003|ひろにも|きりん|170   |70.0
14       |00004|ひろにも|きりん|180   |80.0
15       |00005|ひろにも|きりん|150   |90.0

指定した順番で、連番が振られていることが確認できました。

 

PARTITION BY グループ単位に連番を振る方法

次は、グループ単位に連番を振る方法を紹介します。
グループ単位に連番を振るには、PARTITION BYを利用していきましょう。

さっそく例を見てみましょう。
PARTITION BY nickNameでnickNameごとに連番を振ることができます。

SELECT
  ROW_NUMBER()OVER(PARTITION BY nickName ORDER BY nickName,animal DESC) AS rownumber
 ,id
 ,nickName
 ,animal
 ,height
 ,weight
FROM
  hironimoTable


結果

rownumber|id   |nickName|animal|height|weight
---------+-----+--------+------+------+------
1        |00012|さとう  |ぞう  |150   |50.0
2        |00013|さとう  |ぞう  |160   |60.0
3        |00014|さとう  |きりん|170   |70.0
4        |00015|さとう  |きりん|180   |80.0
1        |00008|すずき  |ねこ  |120   |30.0
2        |00009|すずき  |ねこ  |130   |40.0
3        |00010|すずき  |ぞう  |140   |50.0
4        |00011|すずき  |ぞう  |150   |60.0
1        |00006|たなか  |いぬ  |100   |10.0
2        |00007|たなか  |いぬ  |120   |20.0
1        |00001|ひろにも|きりん|150   |55.5
2        |00002|ひろにも|きりん|160   |60.0
3        |00003|ひろにも|きりん|170   |70.0
4        |00004|ひろにも|きりん|180   |80.0
5        |00005|ひろにも|きりん|150   |90.0

結果をみてみると、nickNameがさとうのデータで連番が1~4まで振られており、すずきはまた1から振られていることが確認できました。

このように、グループ単位に連番を振るときは、PARTITION BYで指定することができます。

まとめ

SQLServerのSELECT文で、連番を振りたい場合は、ROW_NUMBER()OVER(ORDER BY 項目)を使用しましょう。
また、グループごとに連番を振りたい場合は、ROW_NUMBER()OVER(PARTITION BY グループ化項目 ORDER BY 項目)

連番を振りたいときは是非参考にしてください。

 

SQLServerの記事一覧

 

おすすめの記事