Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > Выбор определенного диапозона значений


Автор: LOBsTerr 18.11.2006, 11:15
Я недавно работаю с MS SQL server и тут же наткнулся на одну проблемку, например я делаю выборку:
Код

select * from my_table

она мне возращает 100 значений, но мне надо выбрать только значения с 20 по 70.
Каким образом это можно сделать?
Аналоги таких функций в mysql - limit (нач. знач., кол-во). Или в oracle - rowcount.
В MS SQL  пока ничего такого не нашел, спросил у всех людей работавших с MS SQL, никто не смог мне помочь, пытался написать свою процедурку, но тоже наталкнудся на всякого рода ограничения. Если такой функции нет, я приведу свои решения, может кто поможет куда двигаться дальше. Заранее всем спасибо

Автор: Rodman 18.11.2006, 12:47
Код

SELECT * FROM `student` LIMIT 0, 10   


We have specified here to return 10 records starting from 0 or from the first record. Same way we can ask for 10 records starting from 20th record like this 

Код

SELECT * FROM `student` LIMIT 20, 10


This will return 10 records from 21st record. That is from 21st record to 30th  record. Here is the output

Автор: Golden Hands 18.11.2006, 13:59
Код

SELECT TOP n * from Table

Выбирает n записей, начиная с первой. Указать, с какой записи начинать выборку (а-ля LIMIT) нельзя. Как варианты, можно сортировать датасет нужным образом или использовать BETWEEN в запросе.

P.S. Никакого SELECT...LIMIT в MS SQL Server нет.

Автор: boevik 18.11.2006, 21:47
Если требуется выбрать с n по m запись, то 
Код

select identity(int,1,1) id, * 
into #t 
from my_table

select *
from #t
where id between n and m

Автор: LOBsTerr 19.11.2006, 16:33
2 boevik - Большое спасибо, а то уже всю голову поломал!
2 Rodman - Внимательно читай вопрос!

Автор: LOBsTerr 21.5.2008, 09:41
Вообще есть более стандартное решение, думаю понадобиться тем, кто решает подобные задачи.
Код


WITH mytable AS
(
    SELECT Cost,
    ROW_NUMBER() OVER (ORDER BY Cost) AS 'RowNumber'
    FROM table 
) 
SELECT * 
FROM mytable 
WHERE RowNumber BETWEEN 1 AND 20;


Есть вариант без использования With, но я пока не нашел

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)