我似乎没有在这个网站上运气好,仍然是乐观主义者,我会继续努力。 我有两个表,Journals和ArticleCategories使用此查询加入:
SELECT Journals.JournalId,
Journals.Year,
Journals.Title,
ArticleCategories.ItemText
FROM Journals
LEFT OUTER JOIN ArticleCategories
ON Journals.ArticleCategoryId = ArticleCategories.ArticleCategoryId
任何人都可以告诉我如何重新编写这个使其成为Skip,Take查询。 换句话说,我希望它跳过前n个记录,然后取下一个n。 我认为ROW_NUMBER涉及某个地方,但在这种情况下我无法弄清楚如何使用它。
我怀疑没有太多运气的原因是我发现很难解释我想要做什么。 如果我的问题不明确,请不要犹豫,告诉我哪里出错了,我很乐意再试一次。 也许我还应该提一下,我试图把它放在一个存储过程中。 非常感谢。 非常感谢,
答案 0 :(得分:59)
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,
ItemText
FROM cte
WHERE RN BETWEEN 11 AND 20
对于2012年,这更简单
SELECT Journals.JournalId,
Journals.Year,
Journals.Title,
ArticleCategories.ItemText
FROM Journals
LEFT OUTER JOIN ArticleCategories
ON Journals.ArticleCategoryId = ArticleCategories.ArticleCategoryId
ORDER BY Journals.JournalId,
ArticleCategories.ItemText
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY
答案 1 :(得分:3)
除了@Martin Smith的正确答案 - 使用GROUP BY
时,如果没有OFFSET-FETCH
,则无法使用ORDER BY
:
GROUP BY [cols]
ORDER BY [col] ASC|DESC
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY
下面给出" OFFSET'"""" :
GROUP BY [cols]
--ORDER BY [col] ASC|DESC
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY