用在SQL数据库上,PARADOX不行,ORCALE不是这样的用法。还有你上面的SQL语句写错了。建议你都看点SQL的书。 select top 10 * from (select top 20 * from Table1 order by field1 DESC )as zzz order by field1
hhzh426 (2000-10-08 15:06:00) select top 10 fieldx order by fieldx 获取第10个记录的fieldx的值:fieldx10 select top 10 * where fieldx>fieldx10 order by fieldx(前提条件是fieldx不重复) 也许那种阶段性取值的方法是这么做的!:)
沈前卫 (2000-10-08 19:37:00) select top 20 fieldx order by fieldx minus select top 10 fieldx order by fieldx如果索引建,应该很快。 也可使用存储过程。 使用Cursor还不如使用上面的方法
zwhc (2000-10-08 20:24:00) to 沈前卫: 不行。 :( (我用的是 M$ SQL Server 7) ================================================ 用 order by 提示语法错误 select top 2 * from sysobjects order by name minus select top 2 * from sysobjects order by nameServer: 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 namename 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)
沈前卫 (2000-10-08 21:00:00) 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; 呵呵,笨办法 :)))
沈前卫 (2000-10-08 21:06:00) 〉是呀。我记得好象有个命令,执行该命令就可以显示下 10 条 〉记录;再执行,再显示下 10 条(有可能是我记错了)。 你说的是ADO吧.或者是MySQL? zwhc (2000-10-08 22:00:00) >>你说的是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 zwhc (2000-10-08 22:23:00) “笨方法”可以用,但我还是希望能找到那条命令,沈兄不介意吧。 做了两个用例,感兴趣的可以试试。(数据库是 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_id2、可以设定起始位置 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)
温柔一刀 (2000-10-08 22:53:00) 如果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),让我的分数变成“整数” :-)
soho (2000-10-09 16:44:00) select top 20 * from table1 where a1 not in (select a1 from (select top 10 * from table1) ) 这里假设字段a1为表table1的值唯一的字段
zwhc (2000-10-09 22:40:00) 看到了,怎么没给答复? sorry我从来没用过 ADO,没想到还有这种妙用,真不错。soho 的贴子刚好解决了“不 order by 主码的情况”, 所以我说是条新思路。
温柔一刀 (2000-10-10 02:50:00) >>soho 的贴子刚好解决了“不 order by 主码的情况”,怎么可能呢?他那是根本没有order,和我说的“不 order by 主码的情况” 根本不是一回事,我是指order by field1,field2,...,或者 order by fieldA,但fieldA不是主码。如果没有order,top有什么意义呀!
LGXing (2000-10-10 03:35:00) SetRange()
shangcm (2000-10-10 10:02:00) //
zwhc (2000-10-10 16:06:00) to 温柔一刀: 哦,是这样的。如果 fieldA 是 talbe1 中值唯一的字段 (fieldA 可以是由多个字段构成的复合字段),那么用 "... fieldA not in (select fieldA ...)..." 就可以解决 “不 order by 主码的情况”,soho 在贴子里没说,但我 确实是因为他的贴子而想到这种用法的。比如以下例子(数据库是 pubs): select top 5 * from employee where emp_id not in (select e1.emp_id from (select top 5 * from employee order by job_id) e1) order by job_id ============================= to LGXing: thanks.
zwhc (2000-10-10 16:18:00) 复合字段的合适例子一时找不到,先用 “convert(char,emp_id)+minit”代替吧。select top 5 * from employee where convert(char,emp_id)+minit not in (select convert(char,e1.emp_id)+minit from (select top 5 * from employee order by job_id) e1) order by job_id
charlie chen (2000-10-10 17:56:00) if use ADOQuery: ////====记录排序==== with ADOQuery1 do begin Close; Sql.Clear; Sql.Add('Select * from 表名 order by 字段 asc'); Open; end; ////===取记录====== ADOQuery1.moveby(记录数)是否符合题意?^O^
fireocean (2000-10-10 19:57:00) select top 20 * from employee where fieldx not in (select top 10 fieldx from employee order by fieldx) order by fieldx 先获得前20条记录,然后从这二十条记录中将前十条记录剔除。 前提是保证fieldx是主关键字。如果不是,则假设主关键字为"MyId",将上面 的SQL 语句改写为 select top 20 * from employee where MyId not in (select top 10 MyId from employee order by fieldx) order by fieldx因为使用了子查询,所以效率肯定会受影响。尤其是大数据集中取数。 温柔一刀 (2000-10-10 21:10:00) 算了算了,不说了,难道我的表达能力真的那么差,就想老猫说的?不过我还是认为你们的理解能力太差,我说的话你们从来不一字一句看清楚, 真不知道你们是怎么编程序的。>>但我确实是因为他的贴子而想到这种用法的 我的贴子在它的之前,并且已经明确给出了这种用法,真不知道你在说什么。byebye,这道题我不再讨论了,分数也不要给我,谢谢。
zwhc (2000-10-10 21:45:00) to 温柔一刀: 你的“来自:温柔一刀 时间:00-10-8 22:53:07 ID:360126 ” 贴子里强调“在不order by 主码的情况下,简单用SQL语句是不可能的,”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而后我从 soho 的贴子联想到可以不“order by 主码”, 在我的“来自:zwhc 时间:00-10-10 16:06:36 ID:361953 ” 贴子里 order by 的是 job_id,而不是 emp_id.select top 3 * from employee where emp_id not in (select top 10 emp_id from employee order by job_id) order by job_id ~~~~~~ ~~~~~~
温柔一刀 (2000-10-11 13:41:00) 分数无所谓,关键是你就是不仔细看我说的话!!!!!>>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的方式。我这里说得很明白,我的语句是“在order by主码的情况下”!!!而在不order by主码的情况下,是不可能的,你的那句 “select top 3 * from employee where emp_id not in (select top 10 emp_id from employee order by job_id) order by job_id”根本是错误的,只能产生不可预料的结果(如果job_id是可以重复的话)ps:我的分数本来已经成为整数了,你这一来,又变成1了 :-)
kane (2000-10-12 17:02:00) TO 温柔一刀: 我用了ADO的RecordSet.PageSize 但是在OPEN的时候报错,请教这是为何,或者 可以发个DEMO给我看看嘛,谢谢啦
g622 (2000-11-19 21:56:00) oracle支持top n吗? charlie chen-7,hhzh426-2,LGXing-2,soho-7,sonie-7,wlq-10,zengr-2,zyy04-2,沈前卫-20,温柔一刀-41,的回答最终被接受。
cyj:你好!我给你提供的SQL 语句在SQL SERVER 中可用。select top 10 * from (select top 20 * from Table1 order by field1)as zzz order by field1 DESC其中 DESC 不能去掉,而且导出表中的 20 不能改为 10。我给你分析一下原因:这个SQL语句中用了一个导出表(其实是一个中间结果集)实现,即 select top 20 * from Table1 order by field1 部分。导出表部分实现了 从Table1中找出按field1 升序排序的前 20 记录;然后再用 select top 10 * from (导出表)as zzz order by field1 DESC 从导出表中选出按field1 降序排序的前 10 条记录,即为Table1中的第10 到20 条记录。明白了吗?
to V_Lucky(Lucky) 对这样做是对的 但出来的记录是原来表中的的第20~11因为是DESC吗 可不可以是11~20呢! 我这么写 select top 10 * from (select top 20 * from Table1 order by field1DESC)as zzz order by field1 是最后的20中的1~10条是不可以的 谢谢你们大家至少让我学到了很多!!!!!!
select top 10 * from (select top 10* from (select top 20*) from table1 order by field1) as zzz order by field1 desc ) as aaa order bye field1
select top 10 *
from
(select top 20 *
from Table1
order by field1 DESC )as zzz
order by field1
但是这种方法并不是很好!你看看tsql的top帮助,就明白这个语句的意思了:嵌套查出前二十条并反向排序,然后再在这二十条中查出前10条,并正向排序,不久是需要的第10到第20条纪录了!
谢了!!!! 明天来来放分!!!!!!
好的应该怎么写呢?为什么不好?
desc是对所有的记录倒序.
语句:
select top 20 *
from authors
order by au_id desc
是取倒序排列后的记录前20条记录.即倒序取出最后20条记录,不是前20条记录.
嵌套三层select后,最外层语句的desc不起作用了.
分类:数据库-C/S型 zwhc (2000-10-07 18:42:00)
select top 10 * from table1
可以获得前 10 条记录。但如果想得到第 11-20 条记录
应该用什么命令?好象论坛里有答案,但我搜索不到。 :(
强烈建议出精华区。
wlq (2000-10-07 18:51:00)
建一個唯一的索引id,然后就可以用﹕
select * from db where id>10 and id <21
zwhc (2000-10-07 18:57:00)
对不起,我所要的值是经过排序的。select top 10 from table1 order by fieldx
wlq (2000-10-07 19:03:00)
我早提過﹐沒人理我﹐不光要設精華區﹐還應該建個高手討論區﹐只有總排名之
topXX才可以發言(當然wlq只有偷聽的份)﹐因為現在人和問題太多了﹐出現了
一些問題﹐大家比較之以前(越早越好)的離線數據﹐高手越來越少﹐帖子越來越爛﹐
最近以來﹐更有一些小丑在此上竄下跳,破壞氣氛
Jams (2000-10-07 19:05:00)
>>
wlq (2000-10-07 19:11:00)
zwhc,你的意思是不是﹐對于任給的排序字段﹐都要把符合的show出來?
fireocean (2000-10-07 19:30:00)
WLQ是小丑吗?你不是也在跳来跳去?不喜欢可以不来,没必要告诉大家你是小丑!!
得罪得罪,只是想到一个悖论“世界上没有绝对地事情”。
zwhc (2000-10-07 19:43:00)
是呀。我记得好象有个命令,执行该命令就可以显示下 10 条
记录;再执行,再显示下 10 条(有可能是我记错了)。
wlq (2000-10-07 22:38:00)
fireocean,因為你加入本論壇只有半個小時的時間﹐所以我姑且原諒你的
無知,一邊去研究你的背論吧以下的話是說給其他朋友聽的﹕
只要是在論壇上呆過一段時間的人就會體會到這里的變化﹐以前的大俠們都很少來了,
一些存心搗蛋的人層出不窮﹐前一陣子出了個5415,搞的天翻地覆﹐如今又有人興風
做浪﹐我看到一個叫sex的一個帖子﹕'這里有最A的色情站點',我感到痛心﹐更令人
痛心的是﹐這種丑惡現象非但無人制止﹐象本人剛才那樣稍有微言﹐就遭遇一些不明
是非的家伙的人身攻擊﹐我象大多數朋友一樣﹐對大富翁有很深的感情﹐我真希望我
們能攜起手來﹐共同維護我們的家園﹐讓大富翁越來越好
zengr (2000-10-08 09:54:00)
使用CLIENTDATASET的PACKETRECORDS不可以吗?
jqw (2000-10-08 10:21:00)
强烈建议出精华区
hhzh426 (2000-10-08 15:06:00)
select top 10 fieldx order by fieldx
获取第10个记录的fieldx的值:fieldx10
select top 10 * where fieldx>fieldx10 order by fieldx(前提条件是fieldx不重复)
也许那种阶段性取值的方法是这么做的!:)
zyy04 (2000-10-08 18:10:00)
hhzh426:我觉得你的方法,有从复扫描的嫌疑,效率不会是最高的
沈前卫 (2000-10-08 19:37:00)
select top 20 fieldx order by fieldx
minus
select top 10 fieldx order by fieldx如果索引建,应该很快。
也可使用存储过程。 使用Cursor还不如使用上面的方法
zwhc (2000-10-08 20:24:00)
to 沈前卫:
不行。 :(
(我用的是 M$ SQL Server 7)
================================================
用 order by 提示语法错误
select top 2 * from sysobjects order by name
minus
select top 2 * from sysobjects order by nameServer: 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 namename 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)
沈前卫 (2000-10-08 21:00:00)
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;
呵呵,笨办法 :)))
沈前卫 (2000-10-08 21:06:00)
〉是呀。我记得好象有个命令,执行该命令就可以显示下 10 条
〉记录;再执行,再显示下 10 条(有可能是我记错了)。
你说的是ADO吧.或者是MySQL?
zwhc (2000-10-08 22:00:00)
>>你说的是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
zwhc (2000-10-08 22:23:00)
“笨方法”可以用,但我还是希望能找到那条命令,沈兄不介意吧。
做了两个用例,感兴趣的可以试试。(数据库是 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_id2、可以设定起始位置
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)
温柔一刀 (2000-10-08 22:53:00)
如果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),让我的分数变成“整数” :-)
soho (2000-10-09 16:44:00)
select top 20 * from table1
where a1 not in
(select a1 from
(select top 10 * from table1)
)
这里假设字段a1为表table1的值唯一的字段
zwhc (2000-10-09 17:44:00)
是条新思路,但有个小 bug:返回的结果集为 20 条记录
温柔一刀 (2000-10-09 19:17:00)
//faint!!
我的贴子你们都没看到?555~~~~~~~~
zwhc (2000-10-09 22:40:00)
看到了,怎么没给答复? sorry我从来没用过 ADO,没想到还有这种妙用,真不错。soho 的贴子刚好解决了“不 order by 主码的情况”,
所以我说是条新思路。
温柔一刀 (2000-10-10 02:50:00)
>>soho 的贴子刚好解决了“不 order by 主码的情况”,怎么可能呢?他那是根本没有order,和我说的“不 order by 主码的情况”
根本不是一回事,我是指order by field1,field2,...,或者
order by fieldA,但fieldA不是主码。如果没有order,top有什么意义呀!
LGXing (2000-10-10 03:35:00)
SetRange()
shangcm (2000-10-10 10:02:00)
//
zwhc (2000-10-10 16:06:00)
to 温柔一刀:
哦,是这样的。如果 fieldA 是 talbe1 中值唯一的字段
(fieldA 可以是由多个字段构成的复合字段),那么用
"... fieldA not in (select fieldA ...)..." 就可以解决
“不 order by 主码的情况”,soho 在贴子里没说,但我
确实是因为他的贴子而想到这种用法的。比如以下例子(数据库是 pubs):
select top 5 *
from employee
where emp_id not in
(select e1.emp_id from
(select top 5 * from employee order by job_id) e1)
order by job_id
=============================
to LGXing:
thanks.
zwhc (2000-10-10 16:18:00)
复合字段的合适例子一时找不到,先用
“convert(char,emp_id)+minit”代替吧。select top 5 *
from employee
where convert(char,emp_id)+minit not in
(select convert(char,e1.emp_id)+minit from
(select top 5 * from employee order by job_id) e1)
order by job_id
charlie chen (2000-10-10 17:56:00)
if use ADOQuery:
////====记录排序====
with ADOQuery1 do
begin
Close;
Sql.Clear;
Sql.Add('Select * from 表名 order by 字段 asc');
Open;
end; ////===取记录======
ADOQuery1.moveby(记录数)是否符合题意?^O^
fireocean (2000-10-10 19:57:00)
select top 20 * from employee where fieldx not in
(select top 10 fieldx from employee order by fieldx) order by fieldx
先获得前20条记录,然后从这二十条记录中将前十条记录剔除。
前提是保证fieldx是主关键字。如果不是,则假设主关键字为"MyId",将上面
的SQL 语句改写为
select top 20 * from employee where MyId not in
(select top 10 MyId from employee order by fieldx) order by fieldx因为使用了子查询,所以效率肯定会受影响。尤其是大数据集中取数。
温柔一刀 (2000-10-10 21:10:00)
算了算了,不说了,难道我的表达能力真的那么差,就想老猫说的?不过我还是认为你们的理解能力太差,我说的话你们从来不一字一句看清楚,
真不知道你们是怎么编程序的。>>但我确实是因为他的贴子而想到这种用法的
我的贴子在它的之前,并且已经明确给出了这种用法,真不知道你在说什么。byebye,这道题我不再讨论了,分数也不要给我,谢谢。
zwhc (2000-10-10 21:45:00)
to 温柔一刀:
你的“来自:温柔一刀 时间:00-10-8 22:53:07 ID:360126 ”
贴子里强调“在不order by 主码的情况下,简单用SQL语句是不可能的,”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而后我从 soho 的贴子联想到可以不“order by 主码”,
在我的“来自:zwhc 时间:00-10-10 16:06:36 ID:361953 ”
贴子里 order by 的是 job_id,而不是 emp_id.select top 3 * from employee where emp_id not in
(select top 10 emp_id from employee order by job_id) order by job_id
~~~~~~ ~~~~~~
sonie (2000-10-10 22:51:00)
我问过ms的人了,没有直接的办法,一定要变通才行
zwhc (2000-10-11 10:12:00)
原以为可以在 Query Amalyzer 上执行游标函数,
所以想弄懂其用法后结束本问。结果发现这么一段
话“这些 API 函数都有一些选项和功能(例如定义
游标的宽度,即行数)。这些功能不能用
Transact-SQL 游标的语法表示”。眼睛直接花掉。那么,只能通过相应的编程环境来调用它了。不研
究了。就此结束本问吧。
=====================================
温柔一刀:你的帮助最大,分数呢,你就要了吧。如
有得罪之处,请多见谅。
zwhc (2000-10-11 10:41:00)
多人接受答案了。
温柔一刀 (2000-10-11 13:41:00)
分数无所谓,关键是你就是不仔细看我说的话!!!!!>>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的方式。我这里说得很明白,我的语句是“在order by主码的情况下”!!!而在不order by主码的情况下,是不可能的,你的那句
“select top 3 * from employee where emp_id not in
(select top 10 emp_id from employee order by job_id) order by job_id”根本是错误的,只能产生不可预料的结果(如果job_id是可以重复的话)ps:我的分数本来已经成为整数了,你这一来,又变成1了 :-)
kane (2000-10-12 17:02:00)
TO 温柔一刀:
我用了ADO的RecordSet.PageSize
但是在OPEN的时候报错,请教这是为何,或者
可以发个DEMO给我看看嘛,谢谢啦
g622 (2000-11-19 21:56:00)
oracle支持top n吗?
charlie chen-7,hhzh426-2,LGXing-2,soho-7,sonie-7,wlq-10,zengr-2,zyy04-2,沈前卫-20,温柔一刀-41,的回答最终被接受。
但是不好的地方在于,查询页数太大的时候就恐怖了,
假如每页显示100条记录,查询第1000页,那么内部嵌套查询top 1000*100条记录,并且倒序排列,外部在进行查询前100条!效率。。!!:(
from
(select top 20 *
from Table1
order by field1)as zzz
order by field1 DESC其中 DESC 不能去掉,而且导出表中的 20 不能改为 10。我给你分析一下原因:这个SQL语句中用了一个导出表(其实是一个中间结果集)实现,即
select top 20 *
from Table1
order by field1
部分。导出表部分实现了 从Table1中找出按field1 升序排序的前 20 记录;然后再用
select top 10 *
from
(导出表)as zzz
order by field1 DESC
从导出表中选出按field1 降序排序的前 10 条记录,即为Table1中的第10 到20 条记录。明白了吗?
我这么写
select top 10 *
from
(select top 20 *
from Table1
order by field1DESC)as zzz
order by field1
是最后的20中的1~10条是不可以的
谢谢你们大家至少让我学到了很多!!!!!!
from
(select top 10*
from
(select top 20*)
from table1
order by field1) as zzz
order by field1 desc ) as aaa
order bye field1