There is no such concept in SS, a table is an unordered set of rows and columns. If there is a group of columns that we can use to uniquely identify each row, then you can use new ranking functions.
;with cte
as
(
select *, row_number() over(order by pk_col) as rn
from dbo.t1
)
select *
from cte
where rn = 3;
AMB
From your response I'm not sure you understood what AMB was suggesting. Let's say that I have a single column table and that this is a simple list of the state names for the USA. There is not default order for these values. This is why in a normal database design you'll have a primary key column in addition to whatever other information you're trying to represent.
Assuming that you don't want to change the way that you have your table set up for whatever reason then you will need to pick some arbitary way to enforce an order on your data. The way that you do this is to order the column. If I wanted to get the fourth state name from my imaginary table what I would do is this.
i = the position you want
select top 1 stateName from tblStates
where stateName in (selec top i stateName from tblStates order by stateNames desc)
order by stateNames asc
This is how you would need to do it in SQL 2000.
Please keep in mind though that like AMB said this ordering is somewhat fake and is imposed by you. The only reason there is a logical order is because you've ordered the result by the value. The Nth result you get back from this may very well not by the Nth result you created in the table but if you're just trying to cycle through the records or if the simple ordering of the values you have is what you need then this will work.
John V. McCarthy
select top 1 stateName from tblStates
where stateName in (selec top i stateName from tblStates order by stateNames desc)
order by stateNames asc
and it has error at i, I tried @i the same error.