以前の記事「【拡張SQL】行番号を割り当てる(其の弐)」の応用です。
ROW_NUMBER()を利用した場合、整列後のデータに対して連番を割り当てるだけでなく、グループ毎に連番を割り当てることができます。
この方法について説明します。

以前の記事では、ORDER BYのみを指定することで、整列後のデータに対して連番を割り当てるようにしました。
今回は、PARTITION BYを併用します。

【ROW_NUMBER()の構文】
  ROW_NUMBER() OVER(PARTITION BY グループ化する項目 ORDER BY 整列する項目)


以下、サンプル。
《環境》
・テーブル名:SAMPLE
・SAMPLE(Key1, Key2, Field1, Field2)
・データ
  Key1, Key2, Field1, Field2
001,001,AAA,111
001,002,BBB,222
002,001,CCC,333
003,001,DDD,444
002,002,EEE,555

《SQL》
SELECT ROW_NUMBER() OVER(PARTITION BY Key1 ORDER BY Key1, Key2)  RowNo
FROM SAMPLE
ORDER BY Key1, Key2

《結果》
  RowNo,Key1, Key2, Field1, Field2
1,001,001,AAA,111
2,001,002,CCC,333
1,002,001,DDD,444
2,002,002,BBB,222
1,003,001,EEE,555

【補足事項】
・ROW_NUMBERは分析ファンクション(関数)、ROWNUMは擬似列という違いがあります。