我有这个数据
5 | Batman
5 | Superman
5 | Wonderwomen
6 | Green Lantern
6 | Green Arrow
7 | Cyborg
当我选择查询时,我想重新编号
1 | Batman
1 | Superman
1 | Wonderwomen
2 | Green Lantern
2 | Green Arrow
3 | Cyborg
思想?
修改
感谢vittore,所以我提出了这个解决方案。我不确定我的查询是否合适。 我做了两次 ROW_NUMBER()。如果我的序列ID正在跳转,则此查询将完全重新编号。
WITH cte AS
(
SELECT ROW_NUMBER() OVER(PARTITION BY id ORDER BY id asc) AS CteId
FROM MyTable
)
SELECT
ROW_NUMBER() OVER(PARTITION BY CteId ORDER BY CteId asc) AS RenumberColumn
FROM cte
答案 0 :(得分:3)
RANK函数就是你要找的东西
select RANK() OVER (ORDER BY id), name
from t
当您阅读它时,请检查row_number()和dense_rank()。
更新:如果您只是单独使用排名,它将不会为您提供所需的值(1 1 1 2 2 3),而是排名值(1 1 1 4 4 6)
所以为了获得(1 2 3)组,排名和加入:
select a.r, t.name from t
inner join (select id, rank() over (order by id asc) r
from t group by id) a
on t.id = a.id
答案 1 :(得分:0)
如果它总是-4,那么:
Select (number-4), name
from table
但我怀疑它就这么简单。