select a0,a1,a2,rownum from (
   select a0,a1,a2 from (select a0,a1,a2 from tbx order by a0 desc )
  ) where rownum<51 order by 4 ;

解决方案 »

  1.   

    SQL> select * from aa;      NAME
    ----------
             1
             2
             3
             6
             4
             5
             8
             7
             9
            10
            11      NAME
    ----------
            12
            15
            13
            14已选择15行。SQL> select * from (
      2  select * from aa order by name desc)
      3  where rownum<=10
      4  order by name
      5  /      NAME
    ----------
             6
             7
             8
             9
            10
            11
            12
            13
            14
            15已选择10行。
      

  2.   

    9i以下版本不支持 from(select ...order by ...)
      

  3.   

    那用分析函数搞掂
    select name from(
    SELECT name,
     row_number()
     OVER (PARTITION BY 1
           ORDER BY name desc NULLS LAST) last_10
    FROM aa) b
    where b.last_10<=10
    order by name;      NAME
    ----------
             6
             7
             8
             9
            10
            11
            12
            13
            14
            15已选择10行。
      

  4.   

    我这里列出3行,反正就那意思,你自己改成10好了SQL> select * from tbx;        A0 A1       A2
    ---------- -------- --------
             1 你好     你不好
             4 他好     他不好
             3 她好     她不好
             2 八戒好   八戒不好
             6 你们都好 就我不好
             5 大家好   保重身体已选择6行。SQL> select a0,a1,a2 from(
      2  SELECT a0,a1,a2,row_number()
      3  OVER (PARTITION BY 1 ORDER BY a0 desc NULLS LAST) last_10
      4  FROM tbx) b
      5  where b.last_10<=3
      6  order by a0;        A0 A1       A2
    ---------- -------- --------
             4 他好     他不好
             5 大家好   保重身体
             6 你们都好 就我不好
      

  5.   

    ATGC兄:还有别的办法吗? ^_^
      

  6.   

    建个临时表吧
    create table temp as (select * from tab order by 1 dexc)select * from temp where rownum<51;
      

  7.   

    如果你的a0是number型的,并且是连续的
    那还可以这样呢
    SQL> select * from tbx;        A0 A1       A2
    ---------- -------- --------
             1 你好     你不好
             4 他好     他不好
             3 她好     她不好
             2 八戒好   八戒不好
             6 你们都好 就我不好
             5 大家好   保重身体已选择6行。SQL> select a.* from tbx a,(select max(a0) max_value from tbx) b
      2  where a.a0>=b.max_value-2
      3  order by a0
      4  /        A0 A1       A2
    ---------- -------- --------
             4 他好     他不好
             5 大家好   保重身体
             6 你们都好 就我不好