我有一张这样的桌子:
+------+------+
| AID | NAME |
+------+------+
| 1 | A |
| 2 | A |
| 3 | A |
| 4 | B |
| 5 | B |
+------+------+
并带有“选择”选项,输出应类似于:
+------+------+------+
| AID | NAME | NEWID|
+------+------+------+
| 1 | A | 1 |
| 2 | A | 2 |
| 3 | A | 3 |
| 4 | B | 1 |
| 5 | B | 2 |
+------+------+------+
我只需要使用SQL,存储过程或函数。
我不知道如何在不使用存储过程的情况下编写查询。
谁可以帮助我?
尼古拉
答案 0 :(得分:1)
您需要row_number()
:
select t.*,
row_number() over (partition by name order by id) as newid
from table t;
编辑::您还可以使用相关子查询:
select t.*,
(select count(*)
from table t1
where t1.name = t.name and t1.id <= t.id
) as newid
from table t;