Probalby some better ways, but I felt like messing around with CTEs:-- Setup Sample DataDECLARE @Table TABLE (id INT, empnm CHAR(1), empage INT, slab VARCHAR(8))INSERT @Table (id, empnm, empage)SELECT 1, 'A', 10UNION ALL SELECT 2, 'B', 20 UNION ALL SELECT 3, 'C', 30 UNION ALL SELECT 4, 'F', 40 UNION ALL SELECT 5, 'G', 10 UNION ALL SELECT 6, 'H', 20 UNION ALL SELECT 7, 'I', 30 UNION ALL SELECT 8, 'J', 40 UNION ALL SELECT 9, 'K', 10 UNION ALL SELECT 10, 'L', 20UNION ALL SELECT 11, 'M', 30UNION ALL SELECT 12, 'N', 40UNION ALL SELECT 13, 'O', 10UNION ALL SELECT 14, 'P', 20UNION ALL SELECT 15, 'Q', 30-- Variable for Slab Size..DECLARE @SlabSize INTSET @SlabSize = 3-- Query to Setup CTE and Update table;WITH CteAS( SELECT ID, ROW_NUMBER() OVER (ORDER BY id) - CASE WHEN ROW_NUMBER() OVER (ORDER BY id) % @SlabSize = 0 THEN @SlabSize ELSE ROW_NUMBER() OVER (ORDER BY id) % @SlabSize END AS GroupNum FROM @Table) UPDATE TSET Slab = D.SlabFROM @Table AS TINNER JOIN ( SELECT ID, CAST(MIN(ID) OVER (PARTITION BY GroupNum) AS VARCHAR(2)) + ' - ' + CAST(MAX(ID) OVER (PARTITION BY GroupNum) AS VARCHAR(2)) AS Slab FROM Cte ) AS D ON T.ID = D.ID -- Verify ResultsSELECT *FROM @Table
EDIT: Small format change.