2013-11-07 3 views
0

Я хочу выбрать набор записей в таблице SQL Server.Получить набор записей в таблице в SQL Server

В SQL Server, я могу это сделать:

select TOP 40,60 * 
from sometable 
order by name 

Я хочу, чтобы получить 40-й до 60-й строки.

спасибо.

+0

Возможный дубликат http://stackoverflow.com/questions/470542/how-do-limit-the-number-of-rows-returned-by-an-oracle-query-after-ordering. – Raj

+0

Фактически - ** нет **; вы не можете запустить этот запрос в SQL Server - он не знает ключевое слово 'LIMIT', это расширение, специфичное для MySQL –

+0

. Я думаю, что вопрос неправильно помечен. 'LIMIT' - это синтаксис MySql, и речь идет о Oracle, и они не помечены. Не имеет никакого отношения к SQL SERVER – Raj

ответ

0

я сделал это, как этот запрос

WITH temp AS 
(SELECT *, ROW_NUMBER() OVER (ORDER BY name) AS 'RowNumber' 
    FROM sometable 
) 
SELECT * FROM temp WHERE RowNumber BETWEEN 40 AND 60 

Спасибо за комментарий ,

0

LIMIT существует в Oracle, но с разными аргументами, первый аргумент указывает смещение первой строки для возврата, а второй указывает максимальное количество возвращаемых строк. Смещение начальной строки равно 0 (не 1):

SELECT * FROM sometbl Order by name LIMIT 40,100; # Retrieve rows 41-100 

Или вы можете действовать как;

SELECT * FROM 
(
    SELECT st.*, Row_Number() OVER (ORDER BY name) rn FROM sometable st 
) 
WHERE rn BETWEEN 40 AND 60; 
0

Использование Row_number функции и выборки строк нужно

WITH tmp AS 
    (SELECT *, ROW_NUMBER() OVER (ORDER BY a.name) AS 'rn', a.* FROM table a) 
    SELECT * FROM tmp WHERE rn BETWEEN 40 AND 60 
0

Попробуйте

SELECT * FROM 
(
    SELECT table.*, Row_Number() OVER (ORDER BY name) rank FROM table 
) 
WHERE rank BETWEEN 40 AND 60; 
Смежные вопросы