举个例子,希望抛砖引玉:
select rownum from
(select rownum from tabname order by 1) where rownum<=1000

解决方案 »

  1.   

    如果排序字段不是主键,是先出rownum,再排序;如果排序字段是主键,则先排序后出rownum
      

  2.   

    对于主键字段,只要select rownum from table order by 主键字段;就可以了,对于非主键字段select rownum,a.你想查看的字段 from (select 你想查看的字段 from table order by 非主键字段) a;
      

  3.   

    若是排序遇到相同的情况下,就不能用rownum.select * from (select rank() over(order by 字段) rk,a.* from table_name a ) order by 字段
      

  4.   

    rank()函数是什么干什么的呀?我怎么找不到呢?
      

  5.   

    rank函数?
    我也没见过,学习。。
      

  6.   

    rank() ORACLE 8i版本以上就有了,是SQL语句中的函数,用于给出名次之类的
      

  7.   

    SELECT deptno, ename, sal, comm, 
       RANK() OVER (PARTITION BY deptno ORDER BY sal DESC, comm) as rk
       FROM emp;    DEPTNO ENAME             SAL       COMM         RK
    ---------- ---------- ---------- ---------- ----------
            10 KING             5000                     1
            10 CLARK            2450                     2
            10 MILLER           1300                     3
            20 SCOTT            3000                     1
            20 FORD             3000                     1
            20 JONES            2975                     3
            20 ADAMS            1100                     4
            20 SMITH             800                     5
            30 BLAKE            2850                     1
            30 ALLEN            1600        300          2
            30 TURNER           1500          0          3
            30 WARD             1250        500          4
            30 MARTIN           1250       1400          5
            30 JAMES             950                     6
      

  8.   

    按照楼主的意思,仿佛下面才可以哦SQL> SELECT deptno, ename, sal, comm,
      2     ROW_NUMBER() OVER (ORDER BY sal DESC, comm NULLS LAST) as rk
      3     FROM emp;    DEPTNO ENAME             SAL       COMM         RK
    ---------- ---------- ---------- ---------- ----------
            10 KING             5000                     1
            20 SCOTT            3000                     2
            20 FORD             3000                     3
            20 JONES            2975                     4
            30 BLAKE            2850                     5
            10 CLARK            2450                     6
            30 ALLEN            1600        300          7
            30 TURNER           1500          0          8
            10 MILLER           1300                     9
            30 WARD             1250        500         10
            30 MARTIN           1250       1400         11    DEPTNO ENAME             SAL       COMM         RK
    ---------- ---------- ---------- ---------- ----------
            20 ADAMS            1100                    12
            30 JAMES             950                    13
            20 SMITH             800                    14已选择14行。
      

  9.   

    SELECT * FROM (
    SELECT deptno, ename, sal, comm,
           ROW_NUMBER() OVER (ORDER BY sal DESC, comm NULLS LAST) as rk
       FROM emp)
    WHERE rk <= 10;
      

  10.   

    我觉得不用那么麻烦,这样就可以了
    对于按主键排序的
    select rownum from accinvhead order by inv_code(主键)
    对于按非主键字段排序的
    select rownum from
    (select rownum from accinvhead order by inv_date(非主键)) where rownum<=1000 order by rownum
    我试过了