- 2008年3月15日 00:02
- データベース
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件を返す
ということになります。
- Newer: アライアンスと合従連衡
- Older: 【SQLServer】OracleのROWNUMを実装する(SQLServer2000以前)
Comments:0
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#野郎