create table Puma2 (tt int) ;select p1.id ,p2.tt
from test p1,Puma2 p2
where p2.tt <p1.max and p2.tt >p1.min再建一个表 专门存放那些值.
笨方法....

解决方案 »

  1.   

    select a.id,b.mins,c.maxs from (select distinct id from table) a,(select min(value) mins from table) b,(select max(value) maxs from table) c;
      

  2.   

    sorry,理解错误,花点时间想想
      

  3.   

    11:53:01 jlanzpa817>create table test1
    11:53:05   2  (id varchar2(10),
    11:53:05   3   min number,
    11:53:05   4   max number
    11:53:05   5  );表已创建。已用时间:  00: 00: 00.91
    11:53:05 jlanzpa817>
    11:53:05 jlanzpa817>insert into test1 values('1001',3,6);
    TABLE已创建 1 行。已用时间:  00: 00: 00.10
    11:53:05 jlanzpa817>commit;提交完成。已用时间:  00: 00: 00.10
    11:53:05 jlanzpa817>
    11:53:05 jlanzpa817>select id,b.rm from test1 a,(select rownum rm from dba_objects where rownum < 10
    00) b
    11:53:05   2  where b.rm between a.min and a.max;ID                 RM
    ---------- ----------
    1001                3
    1001                4
    1001                5
    1001                6已用时间:  00: 00: 00.60
      

  4.   

    SQL> set serveroutput on
    SQL> declare
      2  cursor t_sor is
      3  select * from student;
      4  v_value number;
      5  begin
      6  dbms_output.put_line('id'||'   '||'value');
      7  for v_sor in t_sor loop
      8  for i in 0..(v_sor.book-v_sor.sname) loop
      9  --if v_sor.sname<v_sor.book then
     10  v_value:=v_sor.sname+i;
     11  dbms_output.put_line(v_sor.id||'    '||v_value);
     12  end loop;
     13  end loop;
     14  end;
     15  /
    id   value
    1001    3
    1001    4
    1001    5
    1001    6PL/SQL procedure successfully completed
      

  5.   

    id     min    max
    1001    3      6     <------有这条记录
    select (select id from test),rownum + (select min from test) - 1 
    from all_objects,all_objects where rownum <= (select max - min + 1 from test);select test.id ,rownum + test.min - 1 
    from all_objects,all_objects,test where rownum <= test.max - test.min + 1;
      

  6.   

    多谢楼上各位。jlandzpa给的dba_objects我没有权限,biti_rainy的all_objects可以,只是兄弟好象多写了个all_objects。上面的问题是解决了,但很不好意思的是我问偏了,其实我真实的问题是日期型的(不是数字),楼上各位解决方案都是基于rownum来实现的,有特殊性。原始需求是:在任务分配表中有这样的信息activity_id  staff_id  startDate  endDate  worktime
    0001           1001      2002-12-12  2003-02-07   0.80
    0002           1001      2002-12-24  2003-05-12   0.80
    0003           1001      2003-08-10  2003-12-18   0.80表示员工1001分配了三个任务,时间段分别如上,每天承担的工作量是80%。现在我要查出一个ResultSet,信息是日期和工作量,日期是每天的(从最小的startDate到最大的endDate之间的每一天),工作量是叠加的(如果某天重复安排在多个任务中,它们的工作量要相加)。这就是原始问题,我本来怕说不明白就简化了一下问题,没想到偏了 :)请再帮忙,多谢。
      

  7.   

    大哥date类型跟rownum 有什么差异么?你把 min/max 换成 startdate/enddate 不就ok了?
    不就日期的计算么????还有就是all_objects,不是我写多了,我只是替你考虑而已!
    当然如果是日期,一个all_objects足够了!在解决一条的基础上怎么解决多条这样的记录
    你自己动动脑筋变通一下?同样是构造集合的表连接而已!
      

  8.   


    biti_rainy大侠: 你的方法不错,两个all_objects我的机器承受不起。:) 直接把你的sql语句换一下不行,报“单行子查询返回多个行”,因为我说了会有重叠,不是一条记录变多条,是多条记录变多条,还要把重叠的日期的worktime给sum起来。  我按你们的思路,大体上有一个解决。
     不是最终的方案,不过,总好过在EJB中一句句去循环了。多谢各位。分是不会少了大家的,:)
      

  9.   

    1:只要限制了 rownum ,两个all_objects也没有关系
    2:报“单行子查询返回多个行”这个当然是你自己调整的了,很明显你先前给的条件不可能返回多行的
    主要按照两句中第一句的思路参考内容:www.itpub.net 
    oracle数据库开发版置顶的一个文章,关于 ...可以当作什么精华。的什么什么的一个sql题目,本质上就是以前流行的微软的一个考试题目的思路
      

  10.   

    亦即:
    http://www.itpub.net/showthread.php?s=&threadid=45939
      

  11.   

    如果没有什么好的办法,我到想到一个不知道是否可行:
    select a.id,a.min + b.num -1 from test a,(select rownum num from all_object where rownum <= a.max - a.min +1 ) b;
     因为我当前没有ORACLE调试环境,不知道上面的语法是否有错误。如果不行,使用下面这个:
     select a.id,a.min + b.num -1 from test a,
       (select rownum num from all_object where rownum <= (select max -min +1 from text)) b;
     这种写法有一个缺陷就是如果test 表中有多条记录时出错,所以视具体情况加上WHERE。
     我没有测试这样的速度是不是要快些,我觉得应该没问题。