- PR -

SQL文で件数を指定する方法

1
投稿者投稿内容
ポーター
ベテラン
会議室デビュー日: 2005/02/03
投稿数: 50
投稿日時: 2005-09-14 18:39
SQLで降順指定、取得条件がついていて
「11件目から20件目まで」とか、「11件目から10件分」というふうに
取得するような方法はありますか?
(statusが1のものだけを取得)

テーブルの構成は
no name status
----------------
1 xxx 1
2 ddd 1
3 sss 2
4 aaa 1

データベースはSQLServer2000です。
よろしくお願いいたします。
117
ベテラン
会議室デビュー日: 2005/05/09
投稿数: 94
お住まい・勤務地: 大阪府
投稿日時: 2005-09-14 19:00
思いつき&うろ覚えで申し訳ないですが...
確かSQL ServerはTOP句で上位何件取得するかを指定できたと思うので、
「11件目から20件目まで」てことは「1件目から20件目まで」と「1件目から10件目」の
差集合をとればよいのではと思いますがいかがでしょうか。

#SQLServerでは集合演算子のMINUSは使えなかったような
#となると NOT EXISTS を使うことになるのかな
_________________
# Future Is On Fire !
TLC
大ベテラン
会議室デビュー日: 2005/05/31
投稿数: 152
お住まい・勤務地: 東京都
投稿日時: 2005-09-14 22:46
お疲れ様です。

インデックスに任せて取りたい行からとる

[code]-----
SELECT TOP 10 [ID] FROM [TBLA]
  WHERE [ID] NOT IN(SELECT TOP 11110 [ID] FROM [TBLA])
[code]-----

くるくる回して10行とるとか
[code]-----
SELECT [B].[ID] FROM
  (SELECT TOP 10 [A].[ID] FROM
   (SELECT TOP 11120 [ID] FROM [TBLA]) AS [A] ORDER BY [A].[ID] DESC)
  AS [B] ORDER BY [B].[ID]
[code]-----

両方とも11111 行目から10 件とっています。

あとは Join するとか,
実行プランとにらめっこしながら効率のよい方法を探してください。

----------
TimberLandChapel
http://blogs.timberlandchapel.com/blogs/timberlandchapel/
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2005-09-14 23:14
where status = 1 and no > 10 order by no asc limit 10;
明智重蔵
大ベテラン
会議室デビュー日: 2005/09/05
投稿数: 127
投稿日時: 2005-09-15 11:07
where (順位も求めるサブクエリ) between 11 and 20
とすればできると思います

OracleSQLパズル
http://oraclesqlpuzzle.hp.infoseek.co.jp/3-5.html
1

スキルアップ/キャリアアップ(JOB@IT)