SQL Server - Window Function - ROW_NUMBER



Generating a sequence number using ROW_NUMBER() - (SQL Server 2005 and above)

-- sample data
DECLARE @t TABLE(name VARCHAR(15), age INT, gender CHAR(1))
INSERT INTO @t(name, age, gender) SELECT 'Ted',12,'M'
INSERT INTO @t(name, age, gender) SELECT 'Joe',18,'M'
INSERT INTO @t(name, age, gender) SELECT 'Sue',16,'F'
INSERT INTO @t(name, age, gender) SELECT 'John',18,'M'
INSERT INTO @t(name, age, gender) SELECT 'Mary',19,'F'
INSERT INTO @t(name, age, gender) SELECT 'Doris',16,'F'

-- row_number() query
SELECT
    name, 
    age,
    gender,
    ROW_NUMBER()OVER(ORDER BY name) AS 'row_number'
FROM @t

/*
output: 
name            age         gender row_number
--------------- ----------- ------ -----------
Doris           16          F      1
Joe             18          M      2
John            18          M      3
Mary            19          F      4
Sue             16          F      5
Ted             12          M      6
*/

Generating a sequence number that resets after each category

-- sample data
DECLARE @t TABLE(name VARCHAR(15), age INT, gender CHAR(1))
INSERT INTO @t(name, age, gender) SELECT 'Ted',12,'M'
INSERT INTO @t(name, age, gender) SELECT 'Joe',18,'M'
INSERT INTO @t(name, age, gender) SELECT 'Sue',16,'F'
INSERT INTO @t(name, age, gender) SELECT 'John',18,'M'
INSERT INTO @t(name, age, gender) SELECT 'Mary',19,'F'
INSERT INTO @t(name, age, gender) SELECT 'Doris',16,'F'

-- row_number() query
SELECT
    name, 
    age,
    gender,
    ROW_NUMBER()OVER(PARTITION BY Gender ORDER BY name) AS 'row_number'
FROM @t

/*
output: 
name            age         gender row_number
--------------- ----------- ------ --------------------
Doris           16          F      1
Mary            19          F      2
Sue             16          F      3
Joe             18          M      1
John            18          M      2
Ted             12          M      3
*/

Share |

 Cant find the page you are looking for?
 Help us to improve by adding the content that you are looking for.
 Leave a feedback
 We look forward to hear your comments and feedback.