一道面试题,求解有一个表,里面只有一个字段,而且存储的数据有重复的,
请不用rowid,rownumber之类的sql语句取出第5行到第7行比如:表如下只有一个name字段
NAMETom
Jerry
John
White
Black
Tom
Red
Alex
Frank
Terry
NewLand
我想了两个方法,但是好像都不行啊。
1,用sequence.nextval来自动编号
create sequence test start with 1
select test.nextval as id, name from table where id >=5 and id <=7
报错:说id这个字段不存在2,用expect连接,也就是取只在前7行出现,但是不在前5行出现的数据
select top 7 from talbe
EXPECT
select top 5 from table
一般情况下可行的,但是注意到有重复的项目,比如Tom这个名字是重复的
所以不行
请不用rowid,rownumber之类的sql语句取出第5行到第7行比如:表如下只有一个name字段
NAMETom
Jerry
John
White
Black
Tom
Red
Alex
Frank
Terry
NewLand
我想了两个方法,但是好像都不行啊。
1,用sequence.nextval来自动编号
create sequence test start with 1
select test.nextval as id, name from table where id >=5 and id <=7
报错:说id这个字段不存在2,用expect连接,也就是取只在前7行出现,但是不在前5行出现的数据
select top 7 from talbe
EXPECT
select top 5 from table
一般情况下可行的,但是注意到有重复的项目,比如Tom这个名字是重复的
所以不行
解决方案 »
- 执行拼接字符串的问题
- 跪求 可以执行公式的oracle存储过程。
- 大家帮忙看看这个语句
- 一个存储过程的解决方式,请教
- 借人气一问,水晶报表中的节可否分页显示?分不够可以加。
- 大哥帮帮忙,一个关于oracle角色的问题!谢谢!在线等给分!
- 主数据库服务器(运行在ARCHIVELOG下)数据文件丢失,将丢失的数据文件OFFLINE,重建热备用数据库(STANDBY
- 如何选取某个sql语句出来的记录的最后n行
- 学Oracle要什么基础???
- Oracle DS Forms 为何运行不了
- 数据导入错误提示:预期值是 有效的列说明, "," 或 ")", 而实际值是 "job"。
- 这需求真的有些难,寻求help;
--rownum实现分页
SQL> select rownum ,ename from emp;
ROWNUM ENAME
---------- ----------
1 SMITH
2 ALLEN
3 WARD
4 JONES
5 MARTIN
6 BLAKE
7 CLARK
8 SCOTT
9 KING
10 TURNER
11 ADAMS
12 JAMES
13 FORD
14 MILLER
SQL> select * from(
2 select rownum rn,ename from emp where rownum <=7)
3 where rn >=5
4 /
RN ENAME
---------- ----------
5 MARTIN
6 BLAKE
7 CLARK
SELECT NAME
FROM (SELECT t.*, row_number() over(ORDER BY 1) cn FROM t)
WHERE cn BETWEEN 5 AND 7;
n_count NUMBER := 0;
BEGIN
FOR c IN (SELECT * FROM tabs)
LOOP
IF n_count BETWEEN 5 AND 7
THEN
dbms_output.put_line(c.table_name);
END IF;
n_count := n_count + 1;
END LOOP;
END;
第一个 你的id是在查询列中 你竟然想在where中使用
当前的where只能使用from后的那个表中的字段 你重新as的字段不能用 只能嵌套一层 在外层使用
第二个 oracle貌似没有top函数吧 top是sql的函数 oracle只能order by 然后rownum来实现top