Is anybody to know how to enumerate
this case in t-sql
(Result of enumerate in res_enum
field):
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
Try this Answer.
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
RESULT:
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
Hope this is what you need.