Home > データベース > 【SQLServer】N件目からM件目のレコードを取得する

【SQLServer】N件目からM件目のレコードを取得する

SQLServer2005以降で、ROW_NUMBER を使ってみる

SELECT 
    * 
FROM 
    (
    SELECT 
        ROW_NUMBER() OVER(ORDER BY OrderID, ProductID) AS ROWNUM, 
        * 
    FROM 
        "Order Details Extended" 
    ) A 
WHERE 
    ROWNUM BETWEEN 11 AND 20 
ORDER BY 
    OrderID, 
    ProductID
;

SQLは簡潔明瞭ですが、サブクエリで全件返しているので、効率が良くないかもしれません。


TOP を組み合わせてみる

SELECT TOP 10 
    * 
FROM 
    "Order Details Extended" A 
WHERE 
    NOT EXISTS (
    SELECT 
        * 
    FROM 
        (
        SELECT TOP 10
            * 
        FROM 
            "Order Details Extended" 
        ) B 
    WHERE 
        A.OrderID = B.OrderID 
        AND A.ProductID = B.ProductID
    ) 
ORDER BY 
    OrderID, 
    ProductID
;

NOT EXISTSを使っているので、少し分かりにくいかと思いますが、要約すると、
先頭10件を除いた集合の中から、さらに先頭の10件を返す
ということになります。

Comments:0

Comment Form

Trackbacks:0

TrackBack URL for this entry
http://magicbox.sakura.ne.jp/mt/mt-tb.cgi/562
Listed below are links to weblogs that reference
【SQLServer】N件目からM件目のレコードを取得する from 爆裂!C#野郎

Home > データベース > 【SQLServer】N件目からM件目のレコードを取得する

Search
Feeds
Tag Cloud
Recommend

SQLパズル 第2版 プログラミングが変わる書き方/考え方
SQLパズル 第2版 プログラミングが変わる書き方/考え方

ソフトウェアアーキテクチャ―ソフトウェア開発のためのパターン体系
ソフトウェアアーキテクチャ―ソフトウェア開発のためのパターン体系

ITアーキテクト vol.1
ITアーキテクト vol.1

オブジェクト指向における再利用のためのデザインパターン
オブジェクト指向における再利用のためのデザインパターン

増補改訂版 Java言語で学ぶデザインパターン入門
増補改訂版 Java言語で学ぶデザインパターン入門

増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編
増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編

J2EEデザインパターン
J2EEデザインパターン

アンチパターン―ソフトウェア危篤患者の救出
アンチパターン―ソフトウェア危篤患者の救出

世界でいちばん簡単なネットワークのe本―ネットワークとTCP/IPの基本と考え方がわかる本
世界でいちばん簡単なネットワークのe本―ネットワークとTCP/IPの基本と考え方がわかる本

Return to page top