web-dev-qa-db-ja.com

T-SQL Skip Take Stored Procedure

私はこのサイトであまり運がないようです、それでも永遠に楽観主義者です、私は努力し続けます。このクエリを使用して結合されるJournalsとArticleCategoriesの2つのテーブルがあります。

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はどこかに関係していると思いますが、この場合の使い方がわかりません。

運が悪いのは、自分がやろうとしていることを説明するのが難しいからだと思います。質問が明確でない場合は、どこが間違っているのかを遠慮なく教えてください。喜んで再試行します。おそらく、これをストアドプロシージャに入れようとしていることにも言及する必要があります。どうもありがとう。どうもありがとう、

22
Pete Davies

2005/2008/2008R2の場合

;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 
60
Martin Smith

@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 
3
Adam Hey