如何查询第 11-20 条记录?(100分)

  • 主题发起人 主题发起人 zwhc
  • 开始时间 开始时间
Z

zwhc

Unregistered / Unconfirmed
GUEST, unregistred user!
select top 10 * from table1
可以获得前 10 条记录。但如果想得到第 11-20 条记录
应该用什么命令?

好象论坛里有答案,但我搜索不到。 :(
强烈建议出精华区。
 
建一個唯一的索引id,然后就可以用﹕
select * from db where id>10 and id <21
 
对不起,我所要的值是经过排序的。

select top 10 from table1 order by fieldx
 
我早提過﹐沒人理我﹐不光要設精華區﹐還應該建個高手討論區﹐只有總排名之
topXX才可以發言(當然wlq只有偷聽的份)﹐因為現在人和問題太多了﹐出現了
一些問題﹐大家比較之以前(越早越好)的離線數據﹐高手越來越少﹐帖子越來越爛﹐
最近以來﹐更有一些小丑在此上竄下跳,破壞氣氛
 
zwhc,你的意思是不是﹐對于任給的排序字段﹐都要把符合的show出來?
 
WLQ是小丑吗?你不是也在跳来跳去?不喜欢可以不来,没必要告诉大家你是小丑!!
得罪得罪,只是想到一个悖论“世界上没有绝对地事情”。
 
是呀。我记得好象有个命令,执行该命令就可以显示下 10 条
记录;再执行,再显示下 10 条(有可能是我记错了)。
 
fireocean,因為你加入本論壇只有半個小時的時間﹐所以我姑且原諒你的
無知,一邊去研究你的背論吧

以下的話是說給其他朋友聽的﹕
只要是在論壇上呆過一段時間的人就會體會到這里的變化﹐以前的大俠們都很少來了,
一些存心搗蛋的人層出不窮﹐前一陣子出了個5415,搞的天翻地覆﹐如今又有人興風
做浪﹐我看到一個叫sex的一個帖子﹕'這里有最A的色情站點',我感到痛心﹐更令人
痛心的是﹐這種丑惡現象非但無人制止﹐象本人剛才那樣稍有微言﹐就遭遇一些不明
是非的家伙的人身攻擊﹐我象大多數朋友一樣﹐對大富翁有很深的感情﹐我真希望我
們能攜起手來﹐共同維護我們的家園﹐讓大富翁越來越好
 
使用CLIENTDATASET的PACKETRECORDS不可以吗?
 
强烈建议出精华区
 
select top 10 fieldx order by fieldx
获取第10个记录的fieldx的值:fieldx10
select top 10 * where fieldx>fieldx10 order by fieldx(前提条件是fieldx不重复)
也许那种阶段性取值的方法是这么做的!:)
 
hhzh426:我觉得你的方法,有从复扫描的嫌疑,效率不会是最高的
 
select top 20 fieldx order by fieldx
minus
select top 10 fieldx order by fieldx

如果索引建,应该很快。
也可使用存储过程。 使用Cursor还不如使用上面的方法
 
to 沈前卫:
不行。 :(
(我用的是 M$ SQL Server 7)
================================================
用 order by 提示语法错误
select top 2 * from sysobjects order by name
minus
select top 2 * from sysobjects order by name

Server: Msg 170, Level 15, State 1, Line 2
Line 2: Incorrect syntax near 'minus'.
================================================
不用 order by 的结果不是想要的
select top 2 * from sysobjects -- order by name
minus
select top 2 * from sysobjects -- order by name

name id xtype uid info status base_schema_ver replinfo parent_obj crdate ftcatid schema_ver stats_schema_ver type userstat sysstat indexdel refdate version deltrig instrig updtrig seltrig category cache
-------------------------------------------------------------------------------------------------------------------------------- ----------- ----- ------ ------ ----------- --------------- ----------- ----------- --------------------------- ------- ----------- ---------------- ---- -------- ------- -------- --------------------------- ----------- ----------- ----------- ----------- ----------- ----------- ------
sysobjects 1 S 1 25 -2147483645 65 0 0 1998-11-13 03:00:18.827 0 64 1 S 1 113 0 1998-11-13 03:00:18.827 0 0 0 0 0 2 0
sysindexes 2 S 1 29 -2147483643 33 0 0 1998-11-13 03:00:18.827 0 32 1 S 1 8273 0 1998-11-13 03:00:18.827 0 0 0 0 0 2 0

(2 row(s) affected)

name id xtype uid info status base_schema_ver replinfo parent_obj crdate ftcatid schema_ver stats_schema_ver type userstat sysstat indexdel refdate version deltrig instrig updtrig seltrig category cache
-------------------------------------------------------------------------------------------------------------------------------- ----------- ----- ------ ------ ----------- --------------- ----------- ----------- --------------------------- ------- ----------- ---------------- ---- -------- ------- -------- --------------------------- ----------- ----------- ----------- ----------- ----------- ----------- ------
sysobjects 1 S 1 25 -2147483645 65 0 0 1998-11-13 03:00:18.827 0 64 1 S 1 113 0 1998-11-13 03:00:18.827 0 0 0 0 0 2 0
sysindexes 2 S 1 29 -2147483643 33 0 0 1998-11-13 03:00:18.827 0 32 1 S 1 8273 0 1998-11-13 03:00:18.827 0 0 0 0 0 2 0

(2 row(s) affected)
 
select top 10 id from test
where id>(
select max(tmp.id) from (
select top 10 id from test order by id
) tmp
)
order by id;


呵呵,笨办法 :)))
 
〉是呀。我记得好象有个命令,执行该命令就可以显示下 10 条
〉记录;再执行,再显示下 10 条(有可能是我记错了)。
你说的是ADO吧.或者是MySQL?
 
>>你说的是ADO吧.或者是MySQL?

是呀,记得好象是有这么样的一条命令,我没用过,肯定是在
大富翁看到的,所以我强烈要求出精华区。

minus 有这功能吗?我没安装 Oracle,没办法试,如果可以的
话,应该就是它了。

在SQL 里用 not exists 替代 minus,但不支持你那种用法。

在 ADO 或 MySQL 里支持这种用法吗?

有本书介绍了 API 游标函数,说是可以直接从 Query Analyzer
这类工具中执行,但不能直接从应用程序中调用。我先研究一下
其用法。希望能合用。(分别有如下的存储过程)
sp_cursor
sp_cursor_list
sp_describe_cursor_tables
sp_describe_cursor
sp_describe_cursor_columns
 
“笨方法”可以用,但我还是希望能找到那条命令,沈兄不介意吧。
做了两个用例,感兴趣的可以试试。(数据库是 pubs)

1、普通使用
select top 3 *
from employee
where emp_id>(select max(e2.emp_id)
from (select top 10 * from employee order by emp_id) e2
)
order by emp_id

2、可以设定起始位置
declare @S varchar(3000),@n integer
set @n=20 --设定起始位置
set @S='
select top 3 *
from employee
where emp_id>(select max(e2.emp_id)
from (select top ' + convert(varchar,@n) + ' * from employee order by emp_id) e2
)
order by emp_id'
exec(@S)
 
如果Oracle的minus是这个功能,当然最好。

SQL server看来没有通用解决办法,两个变通办法:
1.你们上面写的这样
2.用ADO,指定pagesize:=10;Open;
而后absolutePage:=2就可以到第二页(第11条开始)

ps:在order by主码的情况下,你们上面写的也太麻烦了,这样就可以:
select top 3 * from employee where emp_id not in
(select top 10 emp_id from employee order by emp_id) order by emp_id
在不order by 主码的情况下,简单用SQL语句是不可能的,只能用ADO的方式。

最后一个要求:如果给我分数,请给各位数为1的(例如:61),让我的分数变成“整数” :-)
 
后退
顶部