How to determine position of row in sql result-set?

The previous posts are correct. Use ROW_NUMBER if using Microsoft SQL Server 2005 or greater.

However, your tags do not specify that you're using MSSQL, so here's a solution that should work across most RDBMS implementations. Essentially, use a correlated subquery to determine the count of rows in the same set that are less than the current row, based on the values of the ORDER clause of the outer query. Something like this:

SELECT      T1.id,
            T1.[name],
            (SELECT COUNT(*) 
             FROM table T2 
             WHERE T2.[name] < T1.[name]) + 1 AS rowpos
FROM        table T1
ORDER BY    T1.[name]

Assuming SQL 2005, you can use Row_Number


The answer depends on which version of SQL you are using.

If you are using MSSQL 2005 you can use the the new analytical function ROW_NUMBER () which generates the sequential number in order which we define in order by clause. The syntax of ROW_NUMBER () function is:

ROW_NUMBER () OVER (ORDER BY )

or

ROW_NUMBER () OVER (PARTITION BY )

If you are using an older version of SQL Server you can create a temp table with an identity column and select the results from that.


You don't mention which RDBMS you're running, but if you're using SQL Server 2005 or greater, you can employ the ROW_NUMBER() function - like this:

SELECT id, name, ROW_NUMBER() OVER (ORDER BY name) AS RowNumber
FROM   MyTable

Then, to fetch a given row, you can use a derived table or a common table expression - like this:

;WITH NumberedRows
AS
(SELECT id, name, ROW_NUMBER() OVER (ORDER BY name) AS RowNumber
FROM    MyTable)
SELECT RowNumber FROM NumberedRows WHERE id = 47

To sort out "which page" the record is on, you would need to divide the row number by the number of records per page, and round up to the nearest integer.

Tags:

Sql

Count