我是SQL / T-SQL的新手,如果有人可以帮助我解决这个问题,那就太好了。
所以我有一个列RID:
RID
111
111
111
222
222
222
333
333
333
现在我必须使用带有BY GROUP或BY_PARTITION的t-sql ROW_NUMBER来获得以下结果:
RID | No
111 | 1
111 | 1
111 | 1
222 | 2
222 | 2
222 | 2
333 | 3
333 | 3
333 | 3
非常感谢。祝你有美好的一天:D
答案 0 :(得分:3)
DENSE_RANK
函数可让您根据RID
中的值对每一行进行排名。
参见下面的模型:
DECLARE @TestTable table (RID INT)
INSERT INTO @TestTable
SELECT 111 UNION ALL
SELECT 111 UNION ALL
SELECT 111 UNION ALL
SELECT 222 UNION ALL
SELECT 222 UNION ALL
SELECT 222 UNION ALL
SELECT 333 UNION ALL
SELECT 333 UNION ALL
SELECT 333 UNION ALL
SELECT 333
SELECT
RID,
[No]=DENSE_RANK() over (order by RID)
FROM
@TestTable
答案 1 :(得分:1)
您可以使用dense_rank()
:
select rid, dense_rank() over (order by rid) as num
from t;
答案 2 :(得分:1)
您已经习惯了密集排名
select * ,dense_rank over (order by rid ) as No from t