T-SQL Skip Take Stored Procedure
For 2005 / 2008 / 2008 R2
;WITH cte AS( SELECT Journals.JournalId, Journals.Year, Journals.Title, ArticleCategories.ItemText, ROW_NUMBER() OVER (ORDER BY Journals.JournalId,ArticleCategories.ItemText) AS RN FROM Journals LEFT OUTER JOIN ArticleCategories ON Journals.ArticleCategoryId = ArticleCategories.ArticleCategoryId) SELECT JournalId, Year, Title, ItemTextFROM cteWHERE RN BETWEEN 11 AND 20
For 2012 this is simpler
SELECT Journals.JournalId, Journals.Year, Journals.Title, ArticleCategories.ItemTextFROM Journals LEFT OUTER JOIN ArticleCategories ON Journals.ArticleCategoryId = ArticleCategories.ArticleCategoryIdORDER BY Journals.JournalId, ArticleCategories.ItemText OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY
In addition to @Martin Smith's correct answer - when using a GROUP BY
, you can't use OFFSET-FETCH
without an ORDER BY
:
GROUP BY [cols]ORDER BY [col] ASC|DESCOFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY
The following gives "incorrect syntaxt near 'OFFSET'" :
GROUP BY [cols]--ORDER BY [col] ASC|DESCOFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY