Piling on, one of the fastest ways of doing this is to use Window Function with the appropriate POC index
😎
IF OBJECT_ID('tempdb..#tab1', 'U') IS NOT NULL
DROP TABLE #tab1;
CREATE TABLE #tab1
(
A INT
,B VARCHAR(10)
,C VARCHAR(10)
,D VARCHAR(10)
,E VARCHAR(10)
);
INSERT #tab1
(A, B, C, D, E)
VALUES (1, 'test', 'test0', 'test2', 'test3'),
(1, 'test1', 'test1', 'test3', 'test4'),
(1, 'test1', 'test2', 'test3', 'test5'),
(1, 'test1', 'test3', 'test3', 'test4');
CREATE NONCLUSTERED INDEX NCLIDX#tab1_A_B_D_E_INCL_C ON #tab1(A ASC, B ASC, D ASC, E ASC) INCLUDE (C);
SELECT
SD.A
,SD.B
,SD.C
,SD.D
,SD.E
,ROW_NUMBER() OVER
(
PARTITION BY SD.A
,SD.B
,SD.D
,SD.E
ORDER BY SD.A
)
FROM #tab1 SD;