
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 項目)
連番を振りたいときは是非参考にしてください。