SQLServerでROW_NUMBER()関数を使うと検索結果に対して連番を独自に採番することができます。
ROW_NUMBER()で連番を取得する
SQLServerでROW_NUMBER()関数を使うと検索結果に対して連番を独自に採番することができます。
1.テーブルの準備
検索するためのテーブルを作成します。
連番は部署ごとに採番するようにします。
CREATE TABLE 社員マスタ
(
社員番号 INT
,氏名 VARCHAR(20)
,部署 VARCHAR(20)
)
2.データの準備
各部署ごとにデータを作成します。
INSERT INTO 社員マスタ VALUES (1, '太郎さん', '営業部' )
INSERT INTO 社員マスタ VALUES (2, '次郎さん', '経理部' )
INSERT INTO 社員マスタ VALUES (3, '三郎さん', '人事部' )
INSERT INTO 社員マスタ VALUES (4, '四郎さん', '営業部' )
INSERT INTO 社員マスタ VALUES (5, '五郎さん', '経理部' )
INSERT INTO 社員マスタ VALUES (6, '六郎さん', '人事部' )
INSERT INTO 社員マスタ VALUES (7, '七郎さん', '営業部' )
INSERT INTO 社員マスタ VALUES (8, '八郎さん', '経理部' )
INSERT INTO 社員マスタ VALUES (9, '九郎さん', '人事部' )
挿入したデータを検索してみます。
SELECT
社員番号
,氏名
,部署
FROM
社員マスタ
ORDER BY
社員番号
検索結果。
| 社員番号 | 氏名 | 部署 |
|---|---|---|
| 1 | 太郎さん | 営業部 |
| 2 | 次郎さん | 経理部 |
| 3 | 三郎さん | 人事部 |
| 4 | 四郎さん | 営業部 |
| 5 | 五郎さん | 経理部 |
| 6 | 六郎さん | 人事部 |
| 7 | 七郎さん | 営業部 |
| 8 | 八郎さん | 経理部 |
| 9 | 九郎さん | 人事部 |
3.ROW_NUMBER()関数を使って連番を採番する
実際にROW_NUMBER()関数を使って連番を採番します。
SELECT
部署
,ROW_NUMBER() OVER (PARTITION BY 部署 ORDER BY 社員番号) AS 部署内での連番
,社員番号
,氏名
FROM
社員マスタ
ORDER BY
部署,部署内での連番
実行結果。
| 部署 | 部署内での連番 | 社員番号 | 氏名 |
|---|---|---|---|
| 営業部 | 1 | 1 | 太郎さん |
| 営業部 | 2 | 4 | 四郎さん |
| 営業部 | 3 | 7 | 七郎さん |
| 経理部 | 1 | 2 | 次郎さん |
| 経理部 | 2 | 5 | 五郎さん |
| 経理部 | 3 | 8 | 八郎さん |
| 人事部 | 1 | 3 | 三郎さん |
| 人事部 | 2 | 6 | 六郎さん |
| 人事部 | 3 | 9 | 九郎さん |
