sql - T-SQL 跳过获取存储过程

标签 sql sql-server tsql pagination

我在这个网站上似乎运气不太好,但我仍然是个乐观主义者,我会继续努力。 我有两个表,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 

关于sql - T-SQL 跳过获取存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5620758/

相关文章:

sql-server - 陷入排名算法

sql-server - 按 Clustered Columnstore Index 中的索引排序

sql-server - 您可以为表指定一个子序列吗?

php - 为什么在查询中添加两个新字段后 SQL 查询不起作用?

mysql - SQL - 添加到现有平均值

sql - SELECT语句比较多个表中的多个字段

sql - Access SQL : Nz() Function executed From VBD

sql - 将结果集从 SQL 导出到插入语句的工具?

sql-server-2008 - 查询优化器运算符的选择-嵌套循环vs哈希匹配(或合并)

截断时的 SQL 触发器