Search code examples
sqlsql-serverenumerate

Specific enumerate in t-sql - SQL Server


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

Solution

  • 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.