繁体   English   中英

T-SQL跳过存储过程

[英]T-SQL Skip Take Stored Procedure

我似乎在这个网站上没有太多运气,仍然永远是乐观主义者,我会继续努力。 我有两个表,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涉及某个地方,但在这种情况下我无法弄清楚如何使用它。

我怀疑没有太多运气的原因是我发现很难解释我想要做什么。 如果我的问题不明确,请不要犹豫,告诉我哪里出错了,我很乐意再试一次。 也许我还应该提一下,我试图把它放在一个存储过程中。 非常感谢。 非常感谢,

对于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 

除了@Martin Smith的正确答案 - 使用GROUP BY ,如果没有ORDER BY ,则不能使用OFFSET-FETCH

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 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM