Как я могу получить n-ую строку в результатах запроса? - PullRequest
2 голосов
/ 14 декабря 2011

Как я могу получить n-ую строку результатов запроса TSQL?

Допустим, я хочу получить 2-й ряд этого SELECT:

SELECT * FROM table
ORDER BY 2 ASC

Ответы [ 3 ]

6 голосов
/ 14 декабря 2011

На какую версию SQL Server вы ориентируетесь? Если 2005 или выше, вы можете использовать ROW_NUMBER, чтобы сгенерировать номер строки и выбрать, используя этот номер. http://msdn.microsoft.com/en-us/library/ms186734.aspx

WITH orderedtable AS
(
    SELECT *, ROW_NUMBER() OVER (ORDER BY <your order here>) AS 'RowNumber'
    FROM table
) 
SELECT * 
FROM orderedtable 
WHERE RowNumber = 2;
1 голос
/ 14 декабря 2011

Вы можете использовать трюк, комбинирующий TOP с ORDER BY ASC / DESC для достижения эффекта, аналогичного LIMIT MySQL *:

SELECT TOP 2 * INTO #temptable FROM table
ORDER BY 2 ASC

SELECT TOP 1 * FROM #temptable
ORDER BY 2 DESC

или без поддельных, но вложенных операторов:

SELECT TOP 1 * FROM
(
    SELECT TOP 2 * FROM table
    ORDER BY 2 ASC
) sub
ORDER BY 2 DESC

Первый раз, когда вы выбираете все строки, вплоть до той, которую вы хотите иметь, а во втором запросе вы выбираете только первую из оставшихся при упорядочении их в обратном порядке , чтоименно тот, который вам нужен.

Источник: http://www.planet -source-code.com / vb / scripts / ShowCode.asp? txtCodeId = 850 & lngWId = 5

0 голосов
/ 14 декабря 2011

В одну сторону;

;with T(rownumber, col1, colN) as (
    select 
         row_number() over (order by ACOLUMN) as rownumber,
         col1,
         colN
    from 
         atable
)
select * from T where rownumber = 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...