一道面试的标准SQL题求解(在等待)

letmehappy2008 2003-03-17 10:19:21
ms sql server中有 top n 的功能把前n条的记录提取出来,这个功能能不能用标准的sql实现
...全文
25 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yonghengdizhen 2003-03-21
  • 打赏
  • 举报
回复
这个人有点弱智.
gks_cn 2003-03-21
  • 打赏
  • 举报
回复
出这样题的人水平是不咋地
yoki 2003-03-18
  • 打赏
  • 举报
回复
select top (m+1) * from (select top (n+m) * from table order by field desc)
order by field



select top m * from table
where field not in (select top n field from table)
其中field为关键字段
w_rose 2003-03-18
  • 打赏
  • 举报
回复
好恶心的问题
hillhx 2003-03-18
  • 打赏
  • 举报
回复
比如有一个主建字段 COL1
SELECT * FROM TB1
WHERE COL1 < (select COL1 FROM TB1 B WHERE (SELECT COUNT(*) FROM TB1 C WHERE B.COL1 > C.COL1) = 100)

用下面的语句也可以,更直观点
SELECT * FROM TB1 B WHERE SELECT COUNT(*) FROM TB1 C WHERE B.COL1 > C.COL1) < 100
hillhx 2003-03-18
  • 打赏
  • 举报
回复
比如有一个主建字段 COL1
SELECT * FROM TB1
WHERE COL1 < (select COL1 FROM TB1 B WHERE (SELECT COUNT(*) FROM TB1 C WHERE B.COL1 > C.COL1) = 100)
hillhx 2003-03-18
  • 打赏
  • 举报
回复
比如有一个主建字段 COL1
SELECT * FROM TB1
WHERE COL1 < ANY (select COL1 WHERE (SELECT COUNT(*) FROM TB1 C WHERE B.COL1 > C.COL1) = 100)

letmehappy2008 2003-03-17
  • 打赏
  • 举报
回复
谢谢,我看得懂,但是这个方法不符合要求,因为题目要求要用一条语句就得到结果,实际的题目是要求取出第N条到第N+m条(如第10到第15)的记录,我把它分成两步,只要能取出前n条的记录就可以用差或交来实现最终结果。
tenflee 2003-03-17
  • 打赏
  • 举报
回复
使用游标吧

declare @id int

DECLARE recounts CURSOR FOR
select id
from 表名
order by id

open recounts --打开游标,取出游标单个变量,用于

fetch next from recounts-- 把字段值存入变量
into @id
WHILE @@FETCH_STATUS = 0
begin

--你要做什么更新,添加之类的操作的话,就在这里搞吧
--比如:
select * from 表名2 where tid=@id
update 表名2 set cmum=9 where tid=@id

fetch next from recounts into @id ---这一句表示在循环游标记录

end

希望你看得明白哦
changeway 2003-03-17
  • 打赏
  • 举报
回复
不能实现(如果不借助游标)

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧