Click here to Skip to main content
15,886,873 members
Articles / Programming Languages / T-SQL
Tip/Trick

Row_Number in SQL Server

Rate me:
Please Sign up or sign in to vote.
3.58/5 (9 votes)
17 Nov 2015CPOL1 min read 20K   5  
Row_Number in SQL Server

Introduction

Row_Number generates a run-time column in the result set which generates sequential number to each row according to the column used in order by clause.

Background

Row_Number feature was introduced in SQL Server 2005.

Using the Code

Syntax

SQL
Row_Number() over (order by col1, col2, ....n partition by col1, col2, ....n)
  • Order By is mandatory. Row Number is assigned in the result set based on the column provided in Order By clause.
  • Partition By is optional which groups the result set based on the column provided in Partition By clause wherein each group, the sequence starts with 1.

Let's create an Employee table on which we would see how it works.

SQL
create table tblEmployee(
    EmpId char(7)
    , FirstName varchar(50)
    , LastName varchar(50)
    , Gender char(1)
)

insert into tblEmployee
select 'EMP0001', 'Sandeep', 'Mittal', 'M' union all
select 'EMP0003', 'Abhay', 'Kumar', 'M' union all
select 'EMP0005', 'Priya', 'Gupta', 'F' union all
select 'EMP0002', 'Reema', 'Gupta', 'F' union all
select 'EMP0004', 'Ritesh', 'Kumar', 'M'

Now, we would generate a sequential number for all the employees using Row_Number.

SQL
select  EmpId, FirstName, LastName, Gender
        , row_number() over (order by EmpId) as RowNum
from    tblEmployee

OUTPUT

Check out the result set where RowNum is generated based on EmpId as provided in Order By.

Multiple columns can be used in the Order By clause.
Let's take another example where we would use multiple columns in Order By clause.

SQL
select  EmpId, FirstName, LastName, Gender
        , row_number() over (order by FirstName, LastName) as RowNum
from    tblEmployee

OUTPUT

In the next example, we will see how Partition By clause works.

SQL
select  EmpId, FirstName, LastName, Gender
        , row_number() over (partition by Gender order by EmpId) as RowNum
from    tblEmployee

OUTPUT

Check out the result set where RowNum is generated starting from 1 for each group i.e., Gender which is provided in Partition By clause.

In Partition By clause also, we can use multiple columns as in Order By clause.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
India India
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
-- There are no messages in this forum --