Как сделать запрос SQL для получения определенного диапазона строк из таблицы - PullRequest
2 голосов
/ 14 июня 2010

Как сделать запрос SQL, если в таблице 30 записей, и я хочу выбрать строки от 12 до 20, где 12 и 20 - номера строк, а не идентификаторы?

IDs         Code
5           ABC 
6           SDF
8           WSA
10          FSD
15          IOP
.
.
.
.
80          AWS 

Ответы [ 3 ]

6 голосов
/ 14 июня 2010

Если вы используете MS SQL Server, то доступна функция row_number () .

Пример:

USE AdventureWorks2008R2;
GO
WITH OrderedOrders AS
(
    SELECT SalesOrderID, OrderDate,
    ROW_NUMBER() OVER (ORDER BY OrderDate) AS 'RowNumber'
    FROM Sales.SalesOrderHeader 
) 
SELECT * 
FROM OrderedOrders 
WHERE RowNumber BETWEEN 50 AND 60;
0 голосов
/ 11 августа 2010

Это зависит от вашей СУБД.ROW_NUMBER () является стандартным способом.Но это не очень быстро и удобно.Вы можете использовать специальную SQL-команду.

Для MSSQL SERVER.ВЫБЕРИТЕ ТОП (5) ...

Для MySQL.SELECT * FROM таблицы LIMIT 0, 30 (0 - начальная позиция, 30 - количество строк).

Для Firebird.ВЫБЕРИТЕ ПЕРВЫЙ 10 ... и т. Д.

Используйте http://en.wikipedia.org/wiki/Select_(SQL)#ROW_NUMBER.28.29_window_function, нестандартный синтаксис.

0 голосов
/ 14 июня 2010

Какую среду SQL вы используете?Ответ будет зависеть от среды.

Кроме того, как упорядочены записи?Они отсортированы каким-либо образом, или вы хотите, чтобы они были в естественном порядке?

Глядя на ваш пример и предполагая, что столбец идентификаторов - это порядок, в котором вы хотите их отсортировать, вы можете использовать такой запрос для MS SQLСервер

select 
  top (20-12) ids, code 
from 
  [yourtable] 
where 
  ids in (SELECT TOP 20 id from stoplists order by id) 
order by 
  ID desc

например, захватите первые X записей, которые вы хотите, а затем захватите записи, которые вы хотите из этого набора результатов.

Вы можете добиться того же в других синтаксисах SQL с немного другим синтаксисом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...