e.g. Suppose we have a table Employees.
SELECT EmployeeId, EmployeeName, Salary FROM Employees EmployeeId EmployeeName -------------------------- P0001 Emp1 P0002 Emp2 P0003 Emp3 P0004 Emp4 P0005 Emp5
ROW_NUMBER() when assign sequence number to rows as:
SELECT ROW_NUMBER() OVER (ORDER BY EmployeeName) AS Row, EmployeeId, EmployeeName FROM Employees Row EmployeeId EmployeeName -------------------------------- 1 P0001 Emp1 2 P0002 Emp2 3 P0003 Emp3 4 P0004 Emp4 5 P0005 Emp5
ROW_NUMBER() when calculating Nth highest salary
We can utilize this function for calculating Nth highest salary of a employee. Suppose we want to find employee with 4th highest salary. This can be done as:SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY Salary) AS Row, EmployeeId, EmployeeName, Salary FROM Employees) AS EMP WHERE Row = 4 Row EmployeeId EmployeeName Salary ------------------------------------------- 4 P0004 Emp4 4500
ROW_NUMBER() when in case of pagination
This can also be used for getting rows which belongs to a particular page only. This is very common scenario of a business application where we have lots of rows in database and we want to filter based on page number.SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY EmployeeName) AS Row, EmployeeId, EmployeeName, Salary FROM Employees) AS EMP WHERE Row BETWEEN 2 AND 4 Row EmployeeId EmployeeName -------------------------------- 2 P0002 Emp2 3 P0003 Emp3 4 P0004 Emp4