具体枚举在 t-sql - SQL 服务器

Specific enumerate in t-sql - SQL Server

有人知道如何 enumerate t-sql 中的这种情况(res_enum 字段中枚举的结果):

id  num res_enum
1   5   1 
1   5   1
2   5   1
2   5   1
3   5   1
4   1   2
4   7   3
5   7   3
5   5   4
5   5   4
6   3   5
7   5   6
7   9   7
7   9   7
7   4   8
8   4   8
8   1   9

试试这个答案。

DECLARE @TABLE TABLE(ID INT, NUM INT)

INSERT INTO @TABLE VALUES(1,5)
INSERT INTO @TABLE VALUES(1,5)
INSERT INTO @TABLE VALUES(2,5)
INSERT INTO @TABLE VALUES(2,5)
INSERT INTO @TABLE VALUES(3,5)
INSERT INTO @TABLE VALUES(4,1)
INSERT INTO @TABLE VALUES(4,7)
INSERT INTO @TABLE VALUES(5,7)
INSERT INTO @TABLE VALUES(5,5)
INSERT INTO @TABLE VALUES(5,5)
INSERT INTO @TABLE VALUES(6,3)
INSERT INTO @TABLE VALUES(7,5)
INSERT INTO @TABLE VALUES(7,9)
INSERT INTO @TABLE VALUES(7,9)
INSERT INTO @TABLE VALUES(7,4)
INSERT INTO @TABLE VALUES(8,4)
INSERT INTO @TABLE VALUES(8,1)

SELECT T1.ID,T1.NUM,SUM(CASE WHEN T1.NUM=t2.NUM THEN 0  ELSE 1 END) OVER(ORDER BY T1.RN)[res_enum]
FROM (
    SELECT *,ROW_NUMBER() OVER(ORDER BY ID)RN 
    FROM @TABLE
    ) T1
LEFT JOIN (
    SELECT *,ROW_NUMBER() OVER(ORDER BY ID)RN 
    FROM @TABLE
    ) T2 ON T1.RN=T2.RN+1

结果:

ID          NUM         res_enum
----------- ----------- -----------
1           5           1
1           5           1
2           5           1
2           5           1
3           5           1
4           1           2
4           7           3
5           7           3
5           5           4
5           5           4
6           3           5
7           5           6
7           9           7
7           9           7
7           4           8
8           4           8
8           1           9

希望这是你需要的。