2012-06-13 5 views
2

Я использую SQL Server 2008.SQL select segment

У меня есть таблица с количеством строк. Я хотел бы всегда разделить x на 5 и выбрать третью группу записей.

Допустим есть 100 записей в таблице:

100/5 = 20 

3-й сегмент будет запись 41 до 60.

Как я смогу в SQL для расчета и выбора только в этом 3-й сегмент ?

Спасибо.

ответ

2

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

Распределяет строки в упорядоченном разделе в определенное количество групп.

Пример:

SELECT col1, col2, ..., coln 
FROM 
(
    SELECT 
     col1, col2, ..., coln, 
     NTILE(5) OVER (ORDER BY id) AS groupno 
    FROM yourtable 
) 
WHERE groupno = 3 
+0

Отлично! Спасибо. –

1

Это идеальное применение для ранжирования функции NTILE.

В принципе, вы определяете свой запрос внутри CTE и добавляете NTILE к своим строкам - число, идущее от 1 до n (аргумент NTILE). Вы заказываете свои строки по одному столбцу, а затем получаете n групп строк, которые вы ищете, и можете работать с любой из этих «групп» данных.

Так попробовать что-то вроде этого:

;WITH SegmentedData AS 
(
    SELECT 
     (list of your columns), 
     GroupNo = NTILE(5) OVER (ORDER BY SomeColumnOfYours) 
    FROM dbo.YourTable 
) 
SELECT * 
FROM SegmentedData 
WHERE GroupNo = 3 

Конечно, вы можете также использовать UPDATE заявление после того, как КТР обновить эти строки.

+0

Отлично! Спасибо. –