select a.*,b.*,c.*  from 
( select 姓名 ,语文, dense_rank() over (order by 语文 desc) 名次 from  tmp_1) a, 
  (select 姓名 ,数学, dense_rank() over ( order by 数学 desc) 名次 from tmp_1) b,
  (select 姓名,总分 ,dense_rank() over (order by  总分 desc) 名次 from (select 姓名,语文+数学 总分 from tmp_1 t order by 语文+数学 desc ) t) c
  where a.名次 = b.名次 and b.名次 = c.名次这个可以满足你的需要.  但是如果出现名次相同的时候,会有重复的数据出现.
记得给分呀.

解决方案 »

  1.   

    好像结果集里的字段名不能重复的,重复字段名也没必要吧,还有名次都是从1,2,3,那为什么要多个字段来表示。下面的也不能完全满足你的要求
    select 姓名语文, 语文,row_number() over(order by 语文 desc) 名次语文,
           姓名数学, 数学,row_number() over(order by 数学 desc) 名次数学,
           ......
           姓名总分, (语文+数学+..) 总分,row_number() over(order by (语文+数学+..) desc) 名次总分
    from  表1
    order by 姓名结果大概是这样的
    姓名语文   语文  名次语文  姓名数学   数学 名次数学   ... 姓名总分  总分 名次总分
    -----------------------------------------------------------
    李四      50      1        李四      25    3       ...     李四   75   2
    王二      40      2        王二      30    2       ...     王二   70   3
    张三      30      3        张三      60    1       ...     张三   90   1
      

  2.   

    denglt() :
    名次相同的时候,不可以有重复的数据 :<duanzilin(寻):
    这个结果我已经得到了,我需要得到按所有科目名次排序的结果  :<谢谢!
      

  3.   

    select 姓名,语文,row_number() over( order by 语文 desc) 名次1,
    姓名,数学,row_number()over( order by 数学 desc)名次2,
    姓名,score,row_number()over( order by score desc)名次3
    from (
    select 姓名,语文,数学,sum(语文+数学) over (partition by 姓名) score from 表 )t
    这个没有同名次的,各个单科也有!!
      

  4.   

    数据:
    name     ch        math
    张三 30 60
    李四 50 70
    王二 40 20
    王五 60 25
    -------------------------------------------------
    select ch.*,math.*,allscore.*
    from
    (select t.name,t.ch,row_number()  over(order by t.ch desc) as sinnum
    from temp t) ch,
    (select t.name,t.math,row_number()  over(order by t.math desc) as sinnum
    from temp t) math,
    (select t.name,(t.ch+t.math) as total ,row_number()  over(order by (t.ch+t.math) desc) as sinnum
    from temp t) allscore
    where ch.sinnum=allscore.sinnum and math.sinnum=allscore.sinnum
    order by allscore.sinnum 
    -------------------------------------------------
    输出结果:
    王五 60 1 李四 70 1 李四 120 1
    李四 50 2 张三 60 2 张三 90 2
    王二 40 3 王五 25 3 王五 85 3
    张三 30 4 王二 20 4 王二 60 4
      

  5.   

    不好意思,上面那个不对 ,看这个
    select t1.姓名,t1.语文,t1.r1,t2.姓名,t2.数学,t2.r2,t3.姓名,t3.总分,t3.r3 from
    (select 姓名,语文,row_number() over( order by 语文 desc) r1 from table) t1,
    (select 姓名,数学,row_number()over( order by 数学 desc) r2 from table) t2,
    (select 姓名,(语文+数学) 总分,row_number()over( order by (语文+数学) desc) r3 from table) t3
    where t1.r1 = t2.r2 and t1.r1 = t3.r3
    数据:
    李斯 82 45
    张三  50 73
    结果:
    李斯 82 1 张三  73 1 李斯 127 1
    张三  50 2 李斯 45 2 张三  123 2
      

  6.   

    给一个比较笨蛋的办法:
    SQL> drop table test;表被删掉已执行耗时0.328 秒SQL> create table test(name varchar2(20),yuwen number(3),shuxue number(3));表被创建已执行耗时0.062 秒SQL> insert into test values('张三',30,60);1 行 已插入已执行耗时0.015 秒SQL> insert into test values('李四',50,70);1 行 已插入已执行耗时0 秒SQL> insert into test values('王二',40,20);1 行 已插入已执行耗时0 秒SQL> commit;提交完成已执行耗时0 秒SQL> select a.name 姓名,yuwen 语文,x 名次,b.name 姓名, shuxue 数, y 名次,
      2         c.name 姓名,zongfen 总分,z 名次 from
      3         (select name,yuwen,rownum x from
      4                  (select name,yuwen from test order by yuwen desc) ) a,
      5          (select name,shuxue,rownum y from
      6                  (select name, shuxue from test order by shuxue desc)) b,
      7           (select name,zongfen ,rownum z from
      8                   (select name,yuwen+shuxue zongfen from test order by zongfen desc))c
      9  where a.x=b.y
     10  and   a.x=c.z
     11  order by a.x;姓名                 语文 名次 姓名                   数 名次 姓名                 总分 名次
    -------------------- ---- ---- -------------------- ---- ---- -------------------- ---- ----
    李四                   50    1 李四                   70    1 李四                  120    1
    王二                   40    2 张三                   60    2 张三                   90    2
    张三                   30    3 王二                   20    3 王二                   60    3已执行耗时0.062 秒