SQL Serverでグループ毎に連番を付ける
グループ毎に連番を付けるSQLを紹介します。
コーディング例
BEGIN CREATE TABLE #勤怠( 氏名 VARCHAR(10) ,年月日 INT ,出勤 VARCHAR(5) ,退勤 VARCHAR(5) ); INSERT INTO #勤怠 VALUES ('佐藤',20190901,'8:53','18:07') ,('田中',20190901,'8:52','19:04') ,('山本',20190901,'8:49','18:12') ,('佐藤',20190902,'9:53','19:07') ,('田中',20190902,'9:52','20:04') ,('山本',20190902,'9:49','19:12') ,('佐藤',20190903,'10:53','20:07') ,('田中',20190903,'10:52','21:04') ,('山本',20190903,'10:49','20:12') ; SELECT ROW_NUMBER() OVER (PARTITION BY 氏名 ORDER BY 年月日) AS [枝番] ,* FROM #勤怠 ; DROP TABLE #勤怠; END
実行結果
枝番 | 氏名 | 年月日 | 出勤 | 退勤 |
---|---|---|---|---|
1 | 佐藤 | 20190901 | 8:53 | 18:07 |
2 | 佐藤 | 20190902 | 9:53 | 19:07 |
3 | 佐藤 | 20190903 | 10:53 | 20:07 |
1 | 山本 | 20190901 | 8:49 | 18:12 |
2 | 山本 | 20190902 | 9:49 | 19:12 |
3 | 山本 | 20190903 | 10:49 | 20:12 |
1 | 田中 | 20190901 | 8:52 | 19:04 |
2 | 田中 | 20190902 | 9:52 | 20:04 |
3 | 田中 | 20190903 | 10:52 | 21:04 |
ROW_NUMBER()でレコード番号が取得できますが、OVER句でグループ化するカラムをPARTITION BYで指定し、並び順をORDER BYで指定すると、グルーブ毎に指定した並び順で連番が付きます。
以上、「SQL Serverでグループ毎に連番を付ける」の紹介でした。