select 
 A.*,
 row_number() over (partition by col1 order by col2) new_col
from 
 A
希望它能在COL1组内再按COL2排下序.
可是发现ORACLE总是会先用COL1排序再按COL2排,这样就将原来已排好的序打乱了...能否有什么设置将PARTITION BY的排序功能禁掉呢?或有其它方法?A:
COL1  COL2
2     23
2     15
2     10
1     34
1     18
3     11
希望结果:
COL1  COL2  new_col
2     10    1
2     15    2
2     23    3
1     18    1
1     34    2
3     11    1
(COL1的大顺序不变,只是组内再排序一下)

解决方案 »

  1.   

    既然是order by col2,默认升序,那么这段代码select 
     A.*,
     row_number() over (partition by col1 order by col2) new_col
    from 
     A得到的就是你想要的结果
      

  2.   


    只是这样不行.
    原来就是如此写的,可是ORACLE会先用COL1排,再用COL2排,得到的却是:
    COL1 COL2 new_col
    1    18   1
    1    34   2
    2    10   1
    2    15   2
    2    23   3
    3    11   1我希望COL1的大顺序不再变了...
    希望结果:
    COL1 COL2 new_col
    2    10   1
    2    15   2
    2    23   3
    1    18   1
    1    34   2
    3    11   1
      

  3.   


    with t as(
    select 2 c1, 23 c2 from dual
    union all
    select 2,15 from dual
    union all
    select 2,10 from dual
    union all
    select 1,34 from dual
    union all
    select 1,18 from dual
    union all
    select 3,11 from dual
    )
    select t.*, 
    row_number() over (partition by c1 order by c2) rn
    from t
    order by max(rownum) over (partition by c1), rn;
    /*
    2 10 1
    2 15 2
    2 23 3
    1 18 1
    1 34 2
    3 11 1
    */
      

  4.   

    感谢xman_78tom的回答,确实解决了这个问题:-).
    谢谢各位的关注!