SELECT (select count(*) from mytable k2 where k2.scope<=k1.scope),scope into mytable_t
FROM mytable k1)
drop table mytable; 然后改名字mytable_t --->mytable

解决方案 »

  1.   

    select identity(int,1,1) as id,scope into #TempTable order by scope desc
    update a
    set a.rank=b.id 
    from
    YouTable a inner join #TempTable b
    on a.scope=b.scope以上语句要求SCOPE列值唯一,若不唯一需要在YouTable加上一个标识列
      

  2.   

    要是SCOPE不能保证唯一要怎样做啊
      

  3.   

    据我估计,你的这个表中应该还有一个主关键字,姑且认为它的字段名为id,那么sql语句可以写成:
    update yourtable set rank = (
      select count(*) 
      from yourtable as t 
      where t.scope > yourtable.scope or (t.scope = yourtable.scope and t.id <=yourtable.id)
      )scope相同的,id号小的rank小。
      

  4.   

    bluepower2008(蓝色力量)兄,
       你的SQL在Access里是不能運行的,Jet-SQL的Update語法不支持這種寫法,如果是待更新的數據源來自多個表時,它只支持像這種
    Update table1 INNER JOIN table2 ON table1.col=table2.col ....
    Set table1.Colname=table2.colname而且,這個問題我發現除了smartdonkey(聪明的毛驴)兄的方法之外,再沒什麼其它方法了,
    因我試過,先把名次求出來放入一個Query中,第二步再用Update更新,嘿嘿,萬萬沒想到,這Access 硬是死活都不認我的Update, 提示我說"動作必須使用更新查詢",而我明明用的是正確的Jet-SQL語法!!!   後來才發現用於Update里的Query不能有雙重的Select,否則死活都不行。......
      

  5.   

    多谢N_chow(一劍飄香),我写的语句的确没有在access中测试过,我这没环境。
    我用的是子查询,sqlserver肯定支持,access是否支持,我却没有研究过,谢谢指正。