您可以使用row_number()
, 或rank()
与over(partition by personId order by personId)
select personId,
row_number() over(partition by personId order by personId) Sequence_Number
from your_table
编辑:如果您希望结果的排序与您提到的所需输出完全相同,则需要执行order by rownum
两次以保证所需的排序:
select personId,
row_number() over(partition by personId order by rownum) Sequence_Number
from your_table
order by rownum
以下是对上述查询的检查:
SQL> create table your_table (personId int);
Table created.
SQL> insert all
2 into your_table values(32)
3 into your_table values(45)
4 into your_table values(32)
5 into your_table values(67)
6 into your_table values(45)
7 into your_table values(45)
8 select * from dual;
6 rows created.
SQL> commit;
Commit complete.
SQL> select personId,
2 row_number() over(partition by personId order by rownum) Sequence_Number
3 from your_table;
PERSONID SEQUENCE_NUMBER
---------- ---------------
32 1
32 2
45 1
45 2
45 3
67 1
6 rows selected.
SQL> select personId,
2 row_number() over(partition by personId order by rownum) Sequence_Number
3 from your_table
4 order by rownum;
PERSONID SEQUENCE_NUMBER
---------- ---------------
32 1
45 1
32 2
67 1
45 2
45 3
6 rows selected.
SQL> drop table your_table;
Table dropped.
SQL>