SQL Serverでグループ毎に連番を付ける

2019-11-25SQLServer

グループ毎に連番を付ける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でグループ毎に連番を付ける」の紹介でした。