try:
update tbname set pos=(select max(rk) from (
select t.*,rank() over(order by clicks) rk from tbname t) tt
where tt.productId=tbname.produceid)
where exists(select max(rk) from (
select t.*,rank() over(order by clicks) rk from tbname t) tt
where tt.productId=tbname.produceid);

解决方案 »

  1.   

    update table  a set pos=(select rownum from table b where a.productID=b.productID order by clicks);
    你试一下!
      

  2.   

    update tablename k set pos=(select t.pos from (select rownum,productID from tablename order by clicks) t) where k.productID=t.productID;
      

  3.   

    楼上的不行,我试过,因为rownum不是按照 order by 排序的 bzszp(SongZip)得我去试试
      

  4.   

    更正:
    update tablename k set pos=(select t.pos from (select rownum pos,productID from tablename order by clicks desc ) t) where k.productID=t.productID;
      

  5.   

    update ttt set pos = 
    (select rn from 
      (select productid,row_number() over(order by clicks desc) as rn
      from ttt) aa
    where aa.productid = ttt.productid);
      

  6.   

    rownum是行号,它是按照条件排序后的顺序号。应该没问题的。
      

  7.   

    各位说的都对,但是因为我productID上有索引,所以他会按照productid牌序rownum的值就不对了,update的时候他也不是按照clicks的将序赋值的
      

  8.   

    declare 
      cursor cc is select productID ,clicks      from table order by clicks desc;
      v_product   char;
      v_clicks    number;
      i number:=1;
    begin
      open cc;
      fetch cc into v_product,v_clicks;
      while(cc%found) loop
        update table set pos=i where products=v_product;
        i:=i+1;
      fetch cc into v_product,v_clicks;
     end loop; 
     commit;
     close cc;
    end;