如何在oracle中实现跨行操作

meccitljh 2008-01-04 09:18:09
从oracle 10g数据库里查询出按每隔5记录选一条记录而且选出来的记录要有序,该怎么写

请高手指教
...全文
162 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lightwind75 2008-01-26
  • 打赏
  • 举报
回复
可能你用*,它包括了ROWNUM,可以这样:
insert into table_name select 字段列表(不要用*) from (select a.*,rownum rm from table_name a)where mod(rm,6)=1
lightwind75 2008-01-26
  • 打赏
  • 举报
回复
tom_cheung 2008-01-26
  • 打赏
  • 举报
回复
3楼的对,要改一下:mod(rm,6)=1就好了
不过我还是想不通为什么 
select * from tablename where mod(rownum,6)=1
就返回一条


因为rownum的特殊用法,这个sql只会返回一条,
rownum的简单执行流程是这样的
获得第一条记录,给rownum =1 第一条记录满足where 条件就返回了
第二条记录 不满足条件,不返回 但是这里rownum 不会加 1
就这样一直下去就rownum不会增加,where条件从来不满足,这语句只会返回1条记录
可以试试
T@ora>select * from a where rownum =2;

no rows selected

Elapsed: 00:00:00.00
T@ora>select * from a where rownum >1;

no rows selected

Elapsed: 00:00:00.00
T@ora>
是不会返回任何记录的
meccitljh 2008-01-06
  • 打赏
  • 举报
回复
3楼主


我想问一下用你那语句从一张表中选出记录后,怎么样再插回原表中,因为我插回原表时提示的错误信息是插入的数据太多,无法插入!希望楼主能给个方法。如能解决本人以双倍的分给你。谢谢!!!!!!!!!!!!
phoenix_zg 2008-01-05
  • 打赏
  • 举报
回复
我也想知道为什么只返回一条
lightwind75 2008-01-05
  • 打赏
  • 举报
回复
3楼的对,要改一下:mod(rm,6)=1就好了
不过我还是想不通为什么 
select * from tablename where mod(rownum,6)=1
就返回一条

meccitljh 2008-01-05
  • 打赏
  • 举报
回复
回复2楼主

是隔5条记录选一条记录,不是从五条记录中选一条
fxianxian 2008-01-05
  • 打赏
  • 举报
回复
select * from (select a.*,rownum rm from table_name a) where mod(rm,5)=0
order by column
這樣是沒有問題的!
如果按照樓上的話,始終是一條紀錄
代码摆渡人 2008-01-05
  • 打赏
  • 举报
回复
5条记录中选一条有没有什么要求
lula 2008-01-04
  • 打赏
  • 举报
回复
select * from tablename
where mod(rownum,5)=1
order by columnname

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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