Я + 1 @ @ Як, потому что я думаю, что это хороший ответ. Но стоит упомянуть NTILE ().
Причина в том, что если у вас есть 10 010 записей (например), то у вас будет 11 группировок - первые 10 с 1000 в них, а последняя всего с 10.
Если вы сравниваете средние значения для каждой группы из 1000, то вам следует либо отбросить последнюю группу, поскольку она не является репрезентативной, либо ... вы можете сделать все группы одинакового размера.
NTILE () сделает все группы одинакового размера; единственное предостережение - вам нужно знать, сколько групп вы хотите.
Таким образом, если бы в вашей таблице было 25 250 записей, вы бы использовали NTILE (25), и ваши группировки имели бы размер приблизительно 1000 - на самом деле они были бы размером 1010; выгода в том, что все они будут иметь размер того же , что может сделать их более релевантными друг другу с точки зрения любого сравнительного анализа, который вы делаете.
Вы можете получить свой размер группы просто
DECLARE @ntile int
SET @ntile = (SELECT count(1) from myTable) / 1000
А затем измените подход @ Yuck с помощью замены NTILE ():
;WITH myCTE AS (
SELECT NTILE(@ntile) OVER (ORDER BY id) myGroup,
col1, col2, ...
FROM dbo.myTable
)
SELECT myGroup, col1, col2...
FROM myCTE
GROUP BY (myGroup), col1, col2...
;