with a as(select 101 id ,'name1' names from dual
union select 101 id ,'name2' names from dual
union select 101 id ,'name3' names from dual
union select 102 id ,'name1' names from dual
union select 103 id ,'name1' names from dual
union select 103 id ,'name3' names from dual)
select row_number()over(partition by id order by id)num,a.*
from a