2014-02-03 5 views
1

У меня есть запрос, который приводит к более чем 1 миллиону записей в таблице результатов.Как выводить различное количество строк в SQL Server 2012

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

Как я могу запросить, например. первые 500 000 записей, а затем последние?

Я использую SQL Server 2012.

Спасибо заранее!

+0

Положите 'LIMIT 500000' в конце предложения SELECT вашего запроса. – Iqbal

+1

LIMIT 500000 - это команда MySQL, SQL Server не использует ее ... – Sparky

+0

@Sparky, спасибо за указание, в SQL Server Используйте «TOP 5000000» сразу после SELECT CLAUSE вашего запроса. – Iqbal

ответ

1

Вы можете использовать

select TOP 500000 * from table order by id -- to get the first half.. 

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

select * from 
(select top 500000 * from table order by id DESC) xx 
order by xx.id 
+4

Получение «верхней половины» требует знания того, как они упорядочены. 'TOP' без' ORDER BY' бессмысленна, потому что вы говорите SQL Server «Мне все равно, как вы их заказываете», и это означает, что каждый раз, когда вы его запускаете, вы можете получить другой набор из 500K строк (или тот же набор в другом порядке). –

+0

Спасибо Аарон, знал это, но забыл положить его. Цените, указав это ... – Sparky

-3

SELECT TOP 500000 * FROM table_name

Если вы хотите, чтобы дно - максимальные значения в таблице, выполните ORDER BY column_name ASC или DESC

+0

Как вы чувствуете, что это получает «первые» 500000 строк? –

+0

Он вернет первые 500 000 записей в базе данных. Они могут быть заказаны или неупорядочены, но они все равно вернут 500 000 лучших. Какие «первые» строки будут возвращены, будет зависеть от того, как упорядочена таблица, или если/как он заказал таблицу с предложением ORDER BY. – ElGavilan

+7

Это вещь, хотя без ORDER BY нет такой вещи, как «первая» - таблица, по определению, представляет собой неупорядоченный пакет строк *. Вы можете подумать, что каждый раз получаете магические настройки по умолчанию или кластеризованные индексы, но я заверяю вас, что это совпадение и, без явного указания SQL Server, как определить TOP, он может измениться. –

6

Вы можете использовать предложение OFFSET FETCH так:

/* Fetch the first 500k rows */ 
SELECT col1, col2, ... 
FROM TheTable 
ORDER BY Col1 OFFSET 0 ROWS FETCH NEXT 500000 ROWS ONLY; 

/* Fetch the next 500k rows */ 
SELECT col1, col2, ... 
FROM TheTable 
ORDER BY Col1 OFFSET 500000 ROWS FETCH NEXT 500000 ROWS ONLY; 

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

+0

Интересная статья. Должен ли я использовать ASC или DESC перед предложением OFFSET? – user3266538

+0

@ user3266538 Это будет зависеть от того, как вы хотите отсортировать данные, но вам нужно заказать его как-то для использования OFFSET. – jpw

+0

На самом деле у меня есть два столбца для ORDER BY: назовите его дату и номер. – user3266538

Смежные вопросы